#bash #unix #boolean-operations #termux
#bash #unix #логические операции #termux
Вопрос:
Я пытаюсь создать скрипт для автоматической записи моих конфигураций в любую новую систему Unix, которую я запускаю
В моем скрипте я хочу создать каталог git для плагина, который я использую в vim, а затем вставить в него компакт-диск, иначе я хочу вернуться к каталогу, из которого я вызвал скрипт, и выйти, чтобы избежать запуска последующих команд git в неправильном каталоге.
Следующим образом:
( mkdir $nerdgitdir amp;amp; cd $nerdgitdir ) || ( cd $curPwd amp; exit 1 )
mkdir $nerdgitdir
Команда выполняется нормально, как видно из существования каталога, но я никогда не запускаю в нее cd. Я также не выхожу из скрипта в результате «сбоя» cd
(поведение в правой части ||
operator), потому что скрипт продолжает выполнять команды git в неправильном каталоге.
Есть идеи, что я делаю не так с этой строкой? Похоже, что либо команда cd должна завершиться ошибкой, либо выражение за пределами ||
должно не выполняться, но логическая логика подсказывает мне, что хотя бы один из них должен выполняться.
Ответ №1:
Вы меняете рабочий каталог дочерней оболочки, созданной (...)
, а не в вашей текущей оболочке. Вместо этого вам нужно будет использовать {...}
:
{ mkdir "$nerdgitdir" amp;amp; cd "$nerdgitdir"; } || exit 1
(Нет смысла менять рабочий каталог, если вы просто собираетесь выйти.)
Комментарии:
1. Спасибо, не знал
2. Я не вызывал свой скрипт,
source
поэтому я хотел вернуться в каталог, из которого я вызвал скрипт3. @theThing Если вы запускаете скрипт нормально (т. Е. Без команд
source
или.
), он выполняется как подпроцесс, поэтому, когда онcd
работает, он не влияет на родительский процесс (и, следовательно, вам не нужно беспокоиться оcd
возврате).4. Я этого не знал, ха-ха.