3

良い一日。終了コードを取得し、それに応じてコンソール出力を実行できるように、関数を介して実行したい一連のコマンドがあります。そうは言っても、ここには2つの問題があります。

1) stderr を /dev/null に送信できないようです。

2) $1 が実行されるまで、最初のエコー行は表示されません。ハード ドライブでファイルを検索するなど、処理に時間がかかるコマンドを実行するまでは、あまり目立ちません。さらに、出力が次のようになるため、これが事実であることは明らかです。

sh-3.2# ./runScript.sh
sh-3.2# com.apple.auditd: Already loaded
sh-3.2# Attempting... Enable Security Auditing ...Success

つまり、"Attempting... $2" の前に stderr が表示されました。

これが私が使用しようとしている機能です:

#!/bin/bash
function saveChange {
    echo -ne "Attempting... $2"
    exec $1
    if [ "$?" -ne 0 ]; then
        echo -ne " ...Failure\n\r"
    else
        echo -ne " ...Success\n\r"
    fi
}

saveChange "$(launchctl load -w /System/Library/LaunchDaemons/com.apple.auditd.plist)" "Enable Security Auditing"

ヘルプやアドバイスをいただければ幸いです。

4

2 に答える 2

2

これは、stderrをリダイレクトする方法です/dev/null

command 2> /dev/null

例えば

ls -l 2> /dev/null

2 番目の部分 (つまり、の順序付けecho) -- スクリプトの呼び出し中にこのことが原因である可能性があります。$(launchctl load -w /System/Library/LaunchDaemons/com.apple.auditd.plist)

于 2013-05-09T13:11:48.370 に答える