В чем разница между sh и ./ при вызове сценария оболочки? [дубликат]

Короткийsedподход:

sed -En 's/^(.{2}).{17}(\S+).*/\1, \2/gp' test.dat

Выход:

50, Mike
50, Roy
1
10.05.2017, 14:51
1 ответ

Есть несколько отличий.

./scriptname

требует, чтобы файл с именем scriptname был исполняемым, и использовал оболочку, указанную в первой строке (в «шебанге», например, #!/bin/sh), если есть.

sh scriptname

работает до тех пор, пока файл с именем scriptname доступен для чтения и использует sh (что бы это ни было) независимо от того, что указывает shebang скрипта. В некоторых оболочках, если имя_сценария не существует в текущем каталоге, будут выполняться поиски в каталогах, указанных в PATH, и первое найденное там имя_сценария (если any) будет прочитан и интерпретирован вместо этого.

Иными словами,

sh scriptname

будет работать без установки, но вы можете использовать не ту оболочку и запустить не тот скрипт.

./scriptname

попытается запустить правильный сценарий, используя правильную оболочку (или, по крайней мере, оболочку, указанную автором сценария, если таковая имеется), но сначала может потребоваться некоторая настройка (chmod a+x имя_сценария ).

11
27.01.2020, 23:11

Теги

Похожие вопросы