Когда они сталкиваются с проблемой, как это, используйте инструменты отладки, такие как эхо отладчик, или -x
флаг:
bash-3.2$ cmd="echo foo && echo bar"
bash-3.2$ $cmd
foo && echo bar
bash-3.2$
Это показывает, что &&
не рассматривается как синтаксис, когда он результат переменной оболочки. Эквивалентное:
bash-3.2$ set -x
bash-3.2$ $cmd
+ echo foo '&&' echo bar
foo && echo bar
bash-3.2$
Флаг -x
сообщает оболочке, чтобы распечатать каждую команду, поставив перед ним +
маркером, перед его запуском.
(Вы можете получить это лечение как синтаксис, добавив eval
впереди, но в целом это не очень хороший план.)
Есть ли какая-то причина, чтобы не просто писать реальные команды, которые необходимо сделать, например, :
cd $myGitRepo && git add --all && git commit -m "test commit msg" && git push
как тело вашего скрипта?
Если вы хотите автоматически выйти после команды сбоя, sh и bash поддерживают set -e
; bash дает это дополнительное имя errexit
(как опция -o
). Так set -e
говорит оболочке выйти немедленно, если любой из простых команд не в состоянии: (. Чтобы закончить -e
поведение, просто set +e
)
set -e
cd $myGitRepo
git add --all
git commit -m "test commit msg"
git push