В командной строке unix, какая разница между выполнением программы, просто набрав ее имя, или выполнив программу, набрав a. (точка), за которой следует имя программы? например:.
runme
против.
. runme
В командной строке unix, какая разница между выполнением программы, просто набрав ее имя, или выполнив программу, набрав a. (точка), за которой следует имя программы? например:.
runme
против.
. runme
. 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
, вы хотите указать файл.
Использование "source
" или ".
" заставляет команды запускаться в текущем процессе. Выполнение script в качестве исполняемого файла дает ему собственный процесс.
Это наиболее важно, если вы пытаетесь установить переменную среды в текущей оболочке (которую вы не можете сделать в отдельном процессе) или хотите прервать script, не прерывая свою оболочку (которую вы можете делать только в отдельном процесс).
Первая команда выполняет команду. Второй - это сокращение от включения оболочки script внутри другого.
Этот синтаксис используется для "загрузки" и анализа script. Это наиболее полезно, если у вас есть script, который имеет общую функциональность для множества других скриптов, и вы можете просто "указать его". Подробнее см. http://tldp.org/LDP/abs/html/internal.html (прокрутите вниз до команды "точка" ).
Запуск "runme" создаст новый процесс, который пойдет на его веселье и не повлияет на вашу оболочку.
Запуск "runme" позволит script "runme" изменить переменные среды, сменить каталоги и всевозможные другие вещи, которые вы, возможно, захотите сделать для вас. Это может быть сделано только потому, что оно интерпретируется процессом оболочки, который уже работает для вас. Как следствие, если вы используете bash как свою оболочку входа, вы можете использовать только ".". обозначение с помощью bash script, а не (например) двоичное в оболочке C script.