bash4.3 # pwd
/bin
bash4.3 # ll sh
lrwxrwxrwx. 1 root root 4 May 17 22:22 sh -> bash
bash4.3 # ll bash
-rwxr-xr-x. 1 root root 1072056 May 17 22:22 bash
bash4.3 # bash
bash4.3 # sh
sh-4.3#
Meu sistema operacional é o fedora 24 (versão GNOME padrão).
A partir do exemplo, podemos saber: under /bin
, bash
é um executável binário; sh
é um link para bash
.
Portanto, que eu saiba, type bash and press enter
deve efetuar o mesmo resultado exatamente como type sh and press enter
.
Quando eu type bash and press enter
fico [root@localhost bin]#
como o esperado.
No entanto, se eu type sh and press enter
, surpreendentemente entendo sh-4.3#
.
Qual a causa?
Respostas:
Esse é um recurso documentado.
Se você executar o bash por meio de um link simbólico chamado
sh
, o bash será iniciado nosh
modo de compatibilidade.De
man bash
:Como um programa sabe qual nome foi usado para iniciá-lo?
Se for um programa de CA, ele pode inspecionar
argv[0]
. Se é um shell ou script perl, ele pode inspecionar$0
.Como exemplo, vamos considerar este simples script de shell:
$0
é o nome pelo qual o script foi chamado.${0##*/}
é o nome que o script foi chamado com qualquer nome de diretório removido.Vamos criar este link simbólico:
Portanto,
utc
eet
ambos executam o mesmo executável, mas fornecem resultados diferentes. Quando executado comoutc
, gera tempo universal. Quando executado comoet
, é emitido no horário do leste dos EUA. Por exemplo:fonte
argv[0]
, obvs)