スクリプトを編集していたため、スクリプトが少し長くなったので、スクリプトの主要部分を中括弧で囲み、出力をログファイルコマンドのための個々のログリダイレクトを持っています。次に、スクリプトの実行中のコピーをチェックするコマンドブロックが、中括弧で囲まれているかどうかによって2つの異なる結果が得られることに気付きました。bashスクリプト内の中括弧でコマンドを実行したときの結果が異なる
私は、スクリプトを実行します。
$ /bin/bash scriptname.bash
同じコマンドブロックは、2つの異なる結果を返し、括弧内のコマンドブロックの仕事を持つことが可能であるならば、なぜ私の質問はあります。
は、以下のコマンドブロックである:
#!/bin/bash
#set -x # Uncomment to debug this shell script
#
##########################################################
# DEFINE FILES AND VARIABLES HERE
##########################################################
THIS_SCRIPT=$(basename $0)
TIMESTAMP=$(date +%Y-%m-%d_%H%M%S)
LOGFILE=process_check_$TIMESTAMP.log
##########################################################
# BEGINNING OF MAIN
##########################################################
{
printf "%s\n" "Checking for currently runnning versions of this script"
MYPID=$$ # Capture this scripts PID
MYOTHERPROCESSES=$(ps -ef | \grep $THIS_SCRIPT | \grep -v $MYPID | \grep -v grep | awk '{print $2}')
if [[ "$MYOTHERPROCESSES" != "" ]]
then
printf "%s\n" "ERROR: Another version of this script is running...exiting!"
exit 2
else
printf "%s\n" "No other versions running...proceeding"
fi
printf "%s\n" "Doing some script stuff..."
exit 0
} | tee -a $LOGFILE 2>&1
# End of script
pidof
またはpgrep
を使用し、ps | grep -v grep
のような構造を避けますか?あなたは結果を表示することができますか、多分diffをしてください。 – Klausサイドノート:標準出力_and_エラーの両方をログに記録する場合、stderrのリダイレクションはパイプの前で発生する必要があります(またはパイプに '|&'を使用する必要があります)。 –
@Klaus - 中括弧の中にあるブロックには、実行中の別のスクリプトがあることが示されています。中括弧の外側では、ブロックは他のコピーが実行されていないことを正しく評価します。 – martin