$0
não contém o nome do programa de chamada, mas o nome do programa chamado. O programa chamado é ./my_command
então $0
será ./my_command
.
O fato de ser um link simbólico não faz diferença.
O parâmetro shell $0
contém o nome do programa de chamada. Se você criar um link simbólico chamado my_command
em seu diretório inicial para o comando /usr/local/bin/command1
e executá-lo digitando ./my_command
, qual será o valor de $0
? Alguém pode também explicar por quê? Obrigado!
Uma linha de comando (ou melhor, no UNIX, uma matriz de argumentos de linha de comando), incluindo o que se tornaria $0
, é passada para o exec
chama pelo programa de chamada.
Resolução de Symlink, shebang processing etc. só é feita depois disso, pelo sistema, como parte do processamento da chamada exec
.
Assim, qualquer que seja o programa de chamada (o shell no seu caso) especificado como o primeiro item em argv
( /.my_command
no seu caso) torna-se $0
.