Es wird ausgeführt, weil als ausführbare Datei standardmäßig / bin / sh-Skript angenommen wird. Dh wenn Sie keine bestimmte Shell angegeben haben - es ist #! / Bin / sh.
Das // wird in Pfaden einfach ignoriert - Sie können es als einzelnes '/' betrachten.
Sie können also davon ausgehen, dass Sie ein Shell-Skript mit der ersten Zeile haben:
/usr/bin/env go run $0 $@ ; exit
Was macht diese Zeile? Es läuft 'env' mit den Parametern 'go run $ 0 $ @'. Es gibt den Befehl 'go' und 'run $ 0 $ @' als Argumente und beendet das Skript anschließend. $ 0 ist dieser Skriptname. $ @ sind ursprüngliche Skriptargumente. Also läuft diese Zeile los, die dieses Skript mit seinen Argumenten ausführt
Wie in Kommentaren erwähnt, gibt es sehr interessante Details, dass zwei Schrägstriche implementierungsdefiniert sind und dieses Skript POSIX-korrekt wird, wenn drei oder mehr Schrägstriche angegeben werden. Weitere Informationen zum Umgang mit Schrägstrichen in Pfaden finden Sie unter http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html .
Beachten Sie auch, dass es einen weiteren Fehler im Skript gibt, nämlich $ @. Es ist richtig, stattdessen "$ @" zu verwenden, da andernfalls, wenn ein Parameter Leerzeichen enthält, dieser in viele Parameter aufgeteilt wird. Sie können beispielsweise keinen Dateinamen mit Leerzeichen übergeben, wenn Sie nicht das "$ @" verwenden.
Dieses spezielle Skript basiert offensichtlich auf der Idee, dass '//' gleich '/' ist.
//&>/dev/null;x="${0%.*}";[ ! "$x" -ot "$0" ]||(rm -f "$x";cc -o "$x" "$0")&&exec "$x" "$@"
...