Você poderia explicar as seguintes frases do manual do Bash sobre $_
, especialmente as partes em negrito, talvez com alguns exemplos?
Na inicialização do shell, defina o nome do caminho absoluto usado para chamar o shell ou script de shell que está sendo executado conforme passado no ambiente ou na lista de argumentos .
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.
Respostas:
Concordo que não está muito claro.
1. Na inicialização do shell,
se a
_
variável estava no ambiente quebash
recebeu ,bash
ela permanece intocada.Em particular, se isso
bash
shell foi invocado por outrobash
shell (emborazsh
,yash
e algumasksh
implementações também fazê-lo), então issobash
shell irá ter definido a_
variável de ambiente para o caminho do comando a ser executado (que é o 3º ponto na sua pergunta). Por exemplo, sebash
for chamado para interpretar um script como resultado de outrabash
interpretação do shell:Isso
bash
já passou_=/path/to/bash-scrip
no ambiente fornecidobash-script
, e é esse o valor inicial da$_
bash
variável nobash
shell que interpreta esse script.Agora, se o aplicativo que invoca não passa uma
_
variável de ambiente , obash
shell invocado será inicializado$_
paraargv[0]
receber a si próprio o que poderia serbash
,/path/to/bash
ou/path/to/some-script
ou qualquer outra coisa (no exemplo acima, isso seria/bin/bash
se o estrondo do script foi#! /bin/bash
ou/path/to/bash-script
dependendo do sistema ).Portanto, esse texto é enganoso, pois descreve o comportamento do chamador que
bash
não tem controle. O aplicativo invocadobash
pode muito bem não ser definido$_
(na prática, apenas alguns shells e alguns aplicativos interativos raros o fazem,execlp()
por exemplo), ou pode ser usado para algo completamente diferente (por exemplo, oksh93
define*pid*/path/to/command
).2. Posteriormente
O subseqüente também não é muito claro. Na prática, isso é assim que
bash
interpreta um comando simples no ambiente atual do shell.No caso de um shell interativo , esse será o primeiro comando simples interpretado,
/etc/bash.bashrc
por exemplo.Por exemplo, no prompt de um shell interativo:
Para um shell não interativo , seria o primeiro comando no
$BASH_ENV
ou do código alimentado para esse shell se$BASH_ENV
não estiver definido.3. Quando o Bash executa um comando
O terceiro ponto é algo diferente e é sugerido na discussão acima.
bash
, como algumas outras shells, passará uma_
variável de ambiente para os comandos executados que contêm o caminhobash
usado como o primeiro argumento para asexecve()
chamadas do sistema.4. Ao verificar o correio
O quarto ponto é descrito em mais detalhes na descrição da
MAILPATH
variável:Exemplo:
fonte
Tente este exemplo simples:
Execute-o fornecendo o caminho absoluto (
/home/$USERNAME/test.sh
); resultado:Primeiro
$_
contém o caminho que você usou para invocar o script e o segundo contém o primeiro argumento para o meioecho
. Para o terceiro item da lista, se você iniciar um novo terminal e digitar echo$_
, será mostrada a variável que contém oPATH
que normalmente é usado para procurar e chamar comandos (na minha máquina Ubuntu) em um shell normal ou caminho absoluto para o seu.bashrs
arquivo em um shell de login.Para o item quatro da página do manual bash:
fonte
echo $_
éEDITOR
e por que é? Qual caso segue? (3) Você pode dar um exemplo de como verificar e-mails e usar$_
neste caso?.bashrc
e comente todas as linhas lá. Mantenha apenas uma única linha contendo um comando comoecho "test"
ou similar. Salvar e fechar. Então corrabash
e imediatamenteecho $_
. Este último eco deve imprimir teste na saída.MAILPATH
em linuxcommand.org/lc3_man_pages/bash1.htmlPara o caso 2, um exemplo vale mais que mil palavras:
Faz o que você imagina / espera. Dá-me um espaço reservado simples quando estou na linha de comando para evitar que eu me repita.
fonte