Использование бинарных операторов Bash

#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. Я этого не знал, ха-ха.