Він запускається, тому що за замовчуванням виконуваний файл вважається сценарієм / bin / sh. Тобто, якщо ви не вказали якусь конкретну оболонку - це #! / Bin / sh.
// просто ігнорується в шляхах - ви можете вважати, що це як одиничний '/'.
Тож ви можете вважати, що у вас є сценарій оболонки з першого рядка:
/usr/bin/env go run $0 $@ ; exit
Що робить ця лінія? Він працює 'env' з параметрами 'go run $ 0 $ @'. там команда "go", а "run $ 0 $ @" - це аргументи і після цього виходить із скрипту. $ 0 - це назва сценарію. $ @ - це оригінальні аргументи сценарію. Отже, цей рядок працює go, який запускає цей сценарій з його аргументами
Є досить цікаві деталі, як зазначено в коментарях, що два косої риски визначені реалізацією, і цей сценарій став би правильним для POSIX, якщо він визначає три чи більше косої риски. Докладніше про те, як слід керувати косою рискою в шляхах, зверніться до http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html .
Зауважте також, що в скрипті $ @ є правильна помилка замість цього "$ @", тому що в іншому випадку, якщо будь-який параметр містить пробіли, він буде розділений на багато параметрів. Наприклад, ви не можете передавати ім'я файлу з пробілами, якщо ви не використовуєте "$ @"
Цей конкретний сценарій, очевидно, спирається на ідею, що "//" дорівнює "/"
//&>/dev/null;x="${0%.*}";[ ! "$x" -ot "$0" ]||(rm -f "$x";cc -o "$x" "$0")&&exec "$x" "$@"
...