ネストされたコマンドを使用したリダイレクト

ネストされたコマンドを使用したリダイレクト

$commandある画面インスタンスで別のユーザーとして実行しています。
これは、次のコマンドと同等のコマンドで実行されます(詳細は下部を参照)。

su $USERNAME -c "screen -dmS $SCREENNAME $COMMAND"

良い結果。問題は、出力を$COMMANDいくつかのログファイル(たとえば)にリダイレクトしたいということです$LOGFILE

読むよりもちょうど最後> $LOGFILEに付け加えるのが結果のようで、どうすればいいのか混乱します。かっこと中かっこでグループ化してみましたが、エラーが発生して正しく実行できなかったようです。screen$COMMAND

$COMMANDでは、出力をそのエントリにどのようにリダイレクトしますか$LOGFILE


私が実行しているコードは、次のように「同等」です。

execute() {
  su $USERNAME -c "$*"
}
COMMAND="$SOMEDIR/$SOMEPROG $SOMEARGS"
execute screen -dmS $SCREENNAME $COMMAND

答え1

問題は、コマンドをscreen

たとえば、bashを使用するとします。
su $USERNAME -c "screen -dmS $SCREENNAME bash -c \"$COMMAND > $LOGFILE\""

(括弧をエスケープすることは、コマンド全体をbashに渡すことです。そうしないと、出力のscreen代わりに出力をリダイレクトする問題が$COMMAND再び発生します)

関連情報