次のコマンドを使用してnoclobberオプションをテストしようとしましたが、if [ -o noclobber ]
何もしませんでした。
以下を使用するようにnoclobberオプションを設定しましたset +o noclobber
。
prompt> cat checkoption.sh
#!/bin/bash
if [ -o noclobber ]
then
echo "Option is on."
fi
prompt>
prompt> set +o noclobber
prompt> set -o | grep noglobber
noclobber on
prompt> ./checkoption.sh
prompt>
なぜここでメッセージを受信できないのか知っていますか?
答え1
シェルオプションはシェルセッション間で継承されず、ここでは2つのシェルセッションを処理します。
- シェルオプションを設定する対話型セッション
- オプションをテストするシェルスクリプトセッション。
シェルスクリプトは、呼び出す対話型シェルセッションでこのオプションが設定されていることを検出しません。
解決策:
コードをシェル関数(たとえば
$HOME/.bashrc
)に変換します。checknoclobber () { [ -o noclobber ] && echo 'Noclobber is on'; }
または一般的なケースでは
checkoption () { if [ -o "$1" ]; then printf '%s is set\n' "$1" >&2 return 0 else printf '%s is not set (or invalid option name)\n' "$1" >&2 return 1 fi }
スクリプトでオプションを設定します。
source
対話型シェルからスクリプトファイルをインポートするには、またはコマンドを使用します.
。