仕事この回答cron
スクリプトが実行中か対話型で実行されているかどうかを確認するために、このスクリプトを試しました。
#!/bin/bash
# "reliable" interactive check
case "$-" in
*i*)
interactive=1
;;
*)
interactive=0
;;
esac
echo \$-=$- interactive=$interactive
# "maybe" interactive check
if [[ -t 0 ]]; then
interactive=1
else
interactive=0
fi
echo interactive=$interactive
驚くべきことに、インタラクティブなのかどうかについて矛盾する答えを受けました。 bashプロンプトで実行したときの出力は次のとおりです。
$-=hB interactive=0
interactive=1
ちなみにMint 18には以下があります。
$ bash --version
GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redist
だから私の重要な質問は、「信頼できる」方法が間違った答えを生成するのはなぜですか? Bashがオプションに予想フラグを含めないのはなぜですか? 文書これを行う必要があることを示すようです。 「多分」バージョンは実際にはより安定していますか?
ベストアンサー1
「信頼できる」アプローチは、「このシェル」がスクリプトを起動したシェルではなく、対話型ではないスクリプトを実行するシェルであるため失敗します。
標準入力が端末([[ -t 0 ]]
)であることを確認する方がやや安定していますが、スクリプトが実行されている場所であるかどうかはまだ確認されていません。端末で実行されていない場合でも、スクリプトを正常に実行するcron
方法があります。[[ -t 0 ]]
受け入れられた回答スクリプトを手動で呼び出すのではなく、cronで始まることを確認してください。私が見るのはもっと信頼できます。