Onde a 'saída' é definida?

1

Suponha que eu queira um comando bash para fazer algo extra. Como um exemplo simples, imagine que eu apenas queira que ele faça o eco "123" antes de executar.

Uma maneira simples de fazer isso seria alias o comando. Como ainda precisamos do original, podemos nos referir a ele por seu caminho exato, que podemos encontrar usando which . Por exemplo:

$ which rm
/bin/rm
$ echo "alias rm='echo 123 && /bin/rm'" >> .bashrc

Isso foi fácil porque consegui pesquisar o caminho para rm usando which .

No entanto, estou tentando fazer isso com exit , e which parece não saber nada sobre isso.

$ which exit
$ echo $?
1

O comando não gerou um caminho e, na verdade, retornou um código de saída diferente de zero, o que which faz quando um comando não está em $PATH .

Eu pensei que talvez fosse uma função, mas aparentemente esse também não é o caso:

$ typeset -F | grep exit
$ echo $?
1

Portanto, o comando exit não está definido em lugar algum como uma função ou como um comando em $PATH e, ainda assim, quando digito exit , ele fecha o terminal. Então é claramente definido em algum lugar, mas não consigo descobrir onde.

Onde ele é definido e como posso chamá-lo explicitamente?

    
por Isaac Betesh 10.03.2016 / 03:39

3 respostas

5

exit é um shell comando interno incorporado. Foi construído com o interpretador de shell, o shell o conhece e pode executá-lo diretamente sem pesquisar em qualquer lugar.

Na maioria dos shells, você pode usar:

$ type exit
exit is a shell builtin

Você tem que ler a fonte do shell para ver como seu builtin é implementado, aqui está o link para a fonte de bash exit builtin .

Com bash , zsh , ksh93 , mksh , pdksh , para invocar explicitamente o exit incorporado, use o comando builtin builtin:

builtin exit

Veja Como invocar um shell embutido explicitamente? para mais detalhes.

    
por 10.03.2016 / 03:49
1

O comando exit pertence aos internos do bash. Você pode usar isso para encontrar alguma ajuda:

$ help exit

Isso só mostra que exit é conhecido no shell, mas: o que é isso?:

$ type -a exit
exit is a shell builtin

Ele não será encontrado como um arquivo ou programa externo, ele não existe fora do shell.

execute isto: LESS=+/'^ *exit \[n\]' man bash para encontrar isto:

exit [n] Cause the shell to exit with a status of n. If n is omitted, the exit status is that of the last command executed. A trap on EXIT is executed before the shell terminates.

Ele também é definido como um POSIX embutido .

Para chamar explicitamente no código, use isto:

builtin exit
    
por 11.03.2016 / 04:46
0

exit é um comando de um shell então qualquer shell - como bash ou ksh tem esse comando

    
por 10.03.2016 / 03:43

Tags