
私はこれを持っています:
set -e
(
(
docker stop html2pdf
docker rm html2pdf
) || { echo; }
) &
私はこれらのコマンドをバックグラウンドで実行し、そのうちの 1 つが失敗した場合は無視しようとしています。
しかし、次のエラーが発生します:
/home/oleg/codes/cm/html-to-pdf/scripts/run.sh: line 13: syntax error near unexpected token `||'
答え1
set -e
それは継承された環境の一部なので、そのスクリプトにが含まれていると推測します。
簡単な方法は、無視する子供の場合:
( set +e ; docker stop html2pdf ; docker rm html2pdf ) &
(...)
これで、コードのスコープ内ではset -e
効果がなく、両方のコマンドが実行されます。
docker
タスクがバックグラウンド処理されるため、後続のコマンドは自動的に実行されます (コマンドが失敗した場合でも)。
例えば
$ cat x
#!/bin/bash
set -e
( set +e ; docker stop html2pdf ; docker rm html2pdf ) &
echo hello
$ ./x
hello
$ Error response from daemon: No such container: html2pdf
Error: No such container: html2pdf
docker
両方のコマンドが実行されたことがわかりますそしてコマンドecho
が実行されました。