Wie drucke ich nur den Skriptnamen aus?

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

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

Frage : Wie kann ich "foo.sh" ausgeben? Egal wie es ausgeführt wurde.

verdammt gute Frage
quelle

Antworten:

22

Verwendung basename:

#!/bin/bash

basename -- "$0"

Wenn Sie es einer Variablen zuweisen möchten, gehen Sie wie folgt vor:

my_name=$(basename -- "$0")
cjm
quelle
6
Dies wird fehlschlagen , wenn Skriptnamen mit einem Bindestrich beginnen -, benötigen Sie basename -- "$0". Verwenden Sie die Shell-Parametererweiterung, um dies zu vermeiden, und zwingen Sie Sie nicht, einen externen Befehl zu starten.
Cuonglm
3
@cuonglm, es ist unwahrscheinlich, dass ein Skriptname mit einem Bindestrich beginnt, aber es ist ein gültiger Punkt.
cjm
11

POSIXly benötigen Sie nur die Parametererweiterung :

#!/bin/bash

printf '%s\n' "${0##*/}"
cuonglm
quelle
1
+1 für keine zusätzliche Prozessausführung.
Tom Hale