使用嵌套命令重定向

Min*_*uel 5 shell bash

我正在$command屏幕的一个实例中以不同的用户身份运行 。
它由与此命令等效的命令运行(更详细的信息在底部):

su $USERNAME -c "screen -dmS $SCREENNAME $COMMAND"
Run Code Online (Sandbox Code Playgroud)

效果很好。问题是我想将输出重定向$COMMAND到某个日志文件(例如$LOGFILE)。

只是添加> $LOGFILE到末尾似乎是screen从而不是读取$COMMAND,所以我很困惑我应该做什么。我尝试用括号和大括号将其分组,但这导致了错误,所以我可能没有正确执行。

那么如何将输出重定向$COMMAND到呢$LOGFILE


我正在运行的代码与此“等效”:

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

Tom*_* M. 3

问题是,如果将命令直接传递给screen. 因此,解决方案是将命令直接传递给 shell,shell 按预期对其进行解析。

例如,假设您使用 bash:
su $USERNAME -c "screen -dmS $SCREENNAME bash -c \"$COMMAND > $LOGFILE\""

(转义括号是为了将命令作为一个整体传递给bash,否则会再次出现重定向screen's 输出而不是's 输出的问题)$COMMAND