Будет ли команда cd/bin/cat работать в операционной системе Linux?

Различие между получением скрипта с точкой -с помощьюsource(или с помощью ., что является стандартной командой ), и запуском его как собственного скрипта обсуждалось ранее.

См., например,. " В чем разница между поиском ('.' или «источник» )и выполнение файла в bash? ». Это сводится к разнице между запуском скрипта в его собственной отдельной среде (без sourceили.)и запуском набора команд в текущей среде оболочки, которую вы хотите do, если вам нужно установить переменные среды, параметры оболочки и т. д. для текущей оболочки. Установка параметра оболочки или экспорт переменной в скрипте (, который не выполняется с помощью sourceили .), не повлияет на родительскую оболочку.

Конкретный тест, о котором вы спрашиваете,

[ -z "$PS1" ] && return

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

Сценарий с точкой -должен будет использовать return, а не exit, так как exitзавершит текущий сеанс оболочки, что совпадает с сеансом, который вызвал сценарий с помощью sourceили .. Таким образом, скрипт с точкой -ведет себя во многом как функция оболочки.

-9
30.09.2020, 12:36
2 ответа

Запуск cd/bin/catв оболочке будет работать, если текущий каталог содержит каталог с именем cd, который, в свою очередь, содержит каталог binи имеет исполняемый файл cat. В противном случае вы, вероятно, получите такие ошибки, как «Нет такого файла или каталога».

С другой стороны, cd /bin/catпопытается изменить текущий каталог на /bin/cat, что, вероятно, не сработает, так как обычно это расположение стандартной утилиты catи двоичных файлов для программ. являются файлами , а не каталогами. Хотя не исключено, что это каталог, но это была бы несколько странная система.

7
18.03.2021, 23:01

Я вижу две причины.

Нужен пробел после команды. Вы должны отделить команду от ее параметров. (Таким образом, MS -Windows не нуждается в пробеле, но это делает ее более склонной к -неожиданным действиям. )cd /bin/cat

Следующая проблема заключается в том, что /bin/catне является каталогом (ну почти наверняка ).

Я не могу сказать вам больше, так как не знаю, что вы пытаетесь сделать.

1
18.03.2021, 23:01

Теги

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