¿Cómo imprimir solo el nombre del script?

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

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

Pregunta : ¿Cómo puedo generar el "foo.sh"? No importa cómo se ejecutó.

maldita buena pregunta
fuente

Respuestas:

22

Uso basename:

#!/bin/bash

basename -- "$0"

Si desea asignarlo a una variable, haría:

my_name=$(basename -- "$0")
cjm
fuente
66
Esto fallará si el nombre del script comienza con un guión -, es necesario basename -- "$0". Usar la expansión de parámetros de shell para evitar eso y no forzarlo a ejecutar comandos externos.
cuonglm
3
@cuonglm, es poco probable que un nombre de script comience con un guión, pero es un punto válido.
cjm
12

POSIXY, solo necesita la expansión de parámetros :

#!/bin/bash

printf '%s\n' "${0##*/}"
Cuonglm
fuente
1
+1 para ninguna ejecución de proceso adicional.
Tom Hale