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

Более обширный список проблемных символов слова

if (buffer.IndexOf('\u2013') > -1) buffer = buffer.Replace('\u2013', '-');
if (buffer.IndexOf('\u2014') > -1) buffer = buffer.Replace('\u2014', '-');
if (buffer.IndexOf('\u2015') > -1) buffer = buffer.Replace('\u2015', '-');
if (buffer.IndexOf('\u2017') > -1) buffer = buffer.Replace('\u2017', '_');
if (buffer.IndexOf('\u2018') > -1) buffer = buffer.Replace('\u2018', '\'');
if (buffer.IndexOf('\u2019') > -1) buffer = buffer.Replace('\u2019', '\'');
if (buffer.IndexOf('\u201a') > -1) buffer = buffer.Replace('\u201a', ',');
if (buffer.IndexOf('\u201b') > -1) buffer = buffer.Replace('\u201b', '\'');
if (buffer.IndexOf('\u201c') > -1) buffer = buffer.Replace('\u201c', '\"');
if (buffer.IndexOf('\u201d') > -1) buffer = buffer.Replace('\u201d', '\"');
if (buffer.IndexOf('\u201e') > -1) buffer = buffer.Replace('\u201e', '\"');
if (buffer.IndexOf('\u2026') > -1) buffer = buffer.Replace("\u2026", "...");
if (buffer.IndexOf('\u2032') > -1) buffer = buffer.Replace('\u2032', '\'');
if (buffer.IndexOf('\u2033') > -1) buffer = buffer.Replace('\u2033', '\"');
20
задан dmckee 29 May 2009 в 00:01
поделиться

5 ответов

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

A=hello

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

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

25
ответ дан 29 November 2019 в 23:06
поделиться

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

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

16
ответ дан 29 November 2019 в 23:06
поделиться

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

5
ответ дан 29 November 2019 в 23:06
поделиться

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

4
ответ дан 29 November 2019 в 23:06
поделиться

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

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

4
ответ дан 29 November 2019 в 23:06
поделиться
Другие вопросы по тегам:

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