Вы считали, что просто делаете то, что хотите сделать в if
, а не смотрите, прежде чем прыгать?
IE, если вы хотите проверить наличие каталога перед его вводом, попробуйте сделать это:
if pushd /path/you/want/to/enter; then
# commands you want to run in this directory
popd
fi
Если путь, который вы даете pushd
, существует, вы введете его, и он выйдет с 0
, что означает then
часть оператор выполнит. Если он не существует, ничего не произойдет (кроме некоторого выхода, говорящего о том, что каталог не существует, что, вероятно, является полезным побочным эффектом в любом случае для отладки).
Кажется лучше, чем это, что требует повторяя себя:
if [ -d /path/you/want/to/enter ]; then
pushd /path/you/want/to/enter
# commands you want to run in this directory
popd
fi
То же самое работает с cd
, mv
, rm
и т. д. ... если вы попробуете их в файлах, которые не существуют, они выйдут с ошибка и напечатать сообщение о том, что его не существует, и ваш блок then
будет пропущен. Если вы попробуете их в существующих файлах, команда выполнит и выйдет со статусом 0
, что позволит выполнить ваш блок then
.
Ну, есть встроенный режим оболочки, который выделяет синтаксис, если он еще не включен, Mx shell-script-mode
сделает это за вас.
Относительно инструмента для упрощения написания сценариев. Существует отладчик оболочки bash , поэтому, если вы программируете на bash, это немного поможет.
Конечно, есть eshell , оболочка, написанная на Emacs lisp, так что вы можете получить всю подсветку синтаксиса, которую вы ожидаете от lisp, автозаполнения и отладчика emacs lisp.
Я не очень знаком Emacs, но я полагаю, что это не удобно. Как я вижу, хороший язь всегда может делать:
, Таким образом, я рекомендую Идею Jetbrain (с bashsupport плагином) и Визуальный Кодекс Студии (с язем удара и расширением формата раковины).
пикосекунда:
bashsupport - https://plugins.jetbrains.com/plugin/4230-bashsupport /
язь удара - https://marketplace.visualstudio.com/items? itemName=mads-hartmann.bash-ide-vscode
Я не думаю, что есть какой-либо режим для завершения кода для сценариев оболочки, по крайней мере, не в Emacs. (На самом деле я никогда не чувствовал в этом необходимости.) Однако в bash есть поддержка завершения при интерактивном запуске (пакет называется «bash-Completion» или что-то подобное). Это обеспечивает завершение табуляции для многих команд оболочки.