任意のコマンドを実行し、stdoutとstderrを変数にフェッチするための共通関数を作成しました。ただし、パイプを使用したコマンドは正しく機能しません。
私もevalで試しましたが、stdout / stderrを変数にリダイレクトできません
これが私の機能です
LOGFILE="mylog.txt"
Log() {
msg=$2
level=$1
timestamp=`date "+[%F %T]"`
echo ""
echo "" >> $LOGFILE
echo "$timestamp [$level] ==> $msg"
echo ""
echo "$timestamp [$level] ==> $msg" >> $LOGFILE
echo "" >> $LOGFILE
}
RunCommand() {
CMD=$1
MSG1=`printf "Executing command \nCommand: $1"`
OUTPUT=`$CMD 2>&1`
ERRCODE=`echo $?`
MSG2=`printf "\n\nOutput: \n%s" "${OUTPUT}"`
MSG3=`printf "\n\nError Code: %s\n%s" "${ERRCODE}"`
Log INFO "${MSG1}${MSG2}${MSG3}"
}
command="df -h | grep /$"
RunCommand "$command"
出力:
[2019-05-02 05:01:29] [INFO] ==> Executing command
Command: df -h | grep /$
Output:
df: '|': No such file or directory
df: grep: No such file or directory
df: '/$': No such file or directory
Error Code: 1
他のコマンドはエラーなしで機能しています。別の長いコマンドでスクリプトを実行しました。
[2019-05-02 05:10:20] [INFO] ==> Executing command
Command: find /var/bundle/upgrade/ -type f -size +1b
Output:
/var/bundle/upgrade/upgrade.sh
/var/bundle/upgrade/run_task.py
/var/bundle/upgrade/lib/UpgradeTask.pyc
/var/bundle/upgrade/lib/Constants.pyc
/var/bundle/upgrade/lib/Constants.py
/var/bundle/upgrade/lib/UpgradeTask.py
/var/bundle/upgrade/util/FileSystem.pyc
Error Code: 0
以下の変更があなたのために働くかどうかを確認してください
RunCommand() {
CMD=$1
MSG1=`printf "Executing command \nCommand: $1"`
OUTPUT=$(eval "$CMD 2>&1")
ERRCODE=`echo $?`
MSG2=`printf "\n\nOutput: \n%s" "${OUTPUT}"`
MSG3=`printf "\n\nError Code: %s\n%s" "${ERRCODE}"`
Log INFO "${MSG1}${MSG2}${MSG3}"
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加