Comment imprimer uniquement le nom du script?

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

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

Question : Comment puis-je sortir le "foo.sh"? Peu importe comment il a été exécuté.

flipper-bonne-question
la source

Réponses:

22

Utilisation basename:

#!/bin/bash

basename -- "$0"

Si vous voulez l'assigner à une variable, vous feriez:

my_name=$(basename -- "$0")
cjm
la source
6
Cela échouera si le nom du script commence par un tiret -, vous en avez besoin basename -- "$0". Utiliser l'expansion des paramètres du shell pour éviter cela et ne pas vous forcer à lancer une commande externe.
cuonglm
3
@cuonglm, il est peu probable qu'un nom de script commence par un tiret, mais c'est un point valide.
cjm
12

POSIXly, vous n'avez besoin que de l' extension des paramètres :

#!/bin/bash

printf '%s\n' "${0##*/}"
cuonglm
la source
1
+1 pour aucune exécution de processus supplémentaire.
Tom Hale