Como imprimir apenas o nome do script?

9
[username@notebook ~]$ cat foo.sh 
#!/bin/bash

echo "$0"
[username@notebook ~]$ ./foo.sh
./foo.sh
[username@notebook ~]$ 

Pergunta : Como posso gerar o "foo.sh"? Não importa como foi executado.

muito boa pergunta
fonte

Respostas:

22

Use basename:

#!/bin/bash

basename -- "$0"

Se você quiser atribuí-lo a uma variável, faça:

my_name=$(basename -- "$0")
cjm
fonte
6
Isso falhará se o nome do script começar com um traço -, você precisa basename -- "$0". Usando a expansão de parâmetros do shell para evitar isso e não forçá-lo a iniciar um comando externo.
precisa saber é
3
@cuonglm, é improvável que um nome de script comece com um traço, mas é um ponto válido.
Cjm
12

POSIXly, você só precisa de expansão de parâmetro :

#!/bin/bash

printf '%s\n' "${0##*/}"
cuonglm
fonte
1
+1 para nenhuma execução adicional do processo.
Tom Hale