Variável do shell $ _ não se comportando conforme o esperado

11

Qual a razão pela qual o número de linhas difere?

$ head -n 100000 ./access.log > ./data/log.sample
$ cat $_ | wc -l
1933424
Tear
fonte
1
Também visitar parâmetros especiais para a festança
Pandya
1
Em um contexto interativo, !$faça o que você queria, mas não funcionará em um script IIRC.
Zwol 23/03/16
@ zwol: Sim. Eu fiz uma pergunta sobre isso.
Tear
Você deve usar o teecomando em seu script.
Diti

Respostas:

26

$_está expandindo para ./access.log(último argumento do último comando executado), não ./data/log.sample.

Então você está realmente vendo o número de linhas de ./access.log.

O redirecionamento ( >) não faz parte do headcomando, como é feito pelo shell antes mesmo que o headcomando seja iniciado. Daí com $_você teria ./access.log.


De man bash:

($ _, um sublinhado.) Na inicialização do shell, defina o nome do caminho absoluto usado para chamar o shell ou script de shell sendo executado conforme passado na lista de ambiente ou argumento. Posteriormente, expande para o último argumento para o comando anterior , após a expansão. Defina também o nome do caminho completo usado para chamar cada comando executado e colocado no ambiente exportado para esse comando. Ao verificar o correio, este parâmetro mantém o nome do arquivo de correio.

heemail
fonte
1
@ J.Chomel Eu não tenho certeza do que você acha que é um bug, mesmo brincando.
chepner