Подтвердить что ты не робот

Командная строка unix выполняется с. (точка) и без

В командной строке unix, какая разница между выполнением программы, просто набрав ее имя, или выполнив программу, набрав a. (точка), за которой следует имя программы? например:.

runme

против.

. runme
4b9b3361

Ответ 1

. name возвращает файл с именем name в текущую оболочку. Поэтому, если файл содержит этот

A=hello

Затем, если вы его узнаете, впоследствии вы можете обратиться к переменной с именем A, которая будет содержать привет. Но если вы выполните файл (с учетом правильных прав выполнения и строки #!/interpreter), тогда такие вещи не будут работать, поскольку переменная и другие вещи, которые устанавливаются script, будут влиять только на ее подоболочку, в которой она запущена.

Приобретение двоичного файла не имеет никакого смысла: Shell не знает, как интерпретировать двоичный файл (помните, что он вставляет вещи, появляющиеся в этом файле, в текущую оболочку - как старый добрый механизм #include <file> в C). Пример:

head -c 10 /dev/urandom > foo.sh; . foo.sh # don't do this at home!
bash: �ǻD$�/�: file or directory not found

Однако выполнение двоичного файла, конечно, имеет большой смысл. Поэтому обычно вы хотите просто назвать файл, который хотите выполнить, и в особых случаях, например, в случае с тегом A=hello, вы хотите указать файл.

Ответ 2

Использование "source" или "." заставляет команды запускаться в текущем процессе. Выполнение script в качестве исполняемого файла дает ему собственный процесс.

Это наиболее важно, если вы пытаетесь установить переменную среды в текущей оболочке (которую вы не можете сделать в отдельном процессе) или хотите прервать script, не прерывая свою оболочку (которую вы можете делать только в отдельном процесс).

Ответ 3

Первая команда выполняет команду. Второй - это сокращение от включения оболочки script внутри другого.

Ответ 4

Этот синтаксис используется для "загрузки" и анализа script. Это наиболее полезно, если у вас есть script, который имеет общую функциональность для множества других скриптов, и вы можете просто "указать его". Подробнее см. http://tldp.org/LDP/abs/html/internal.html (прокрутите вниз до команды "точка" ).

Ответ 5

Запуск "runme" создаст новый процесс, который пойдет на его веселье и не повлияет на вашу оболочку.

Запуск "runme" позволит script "runme" изменить переменные среды, сменить каталоги и всевозможные другие вещи, которые вы, возможно, захотите сделать для вас. Это может быть сделано только потому, что оно интерпретируется процессом оболочки, который уже работает для вас. Как следствие, если вы используете bash как свою оболочку входа, вы можете использовать только ".". обозначение с помощью bash script, а не (например) двоичное в оболочке C script.