使用嵌套命令重定向

使用嵌套命令重定向

$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.因此,解决方案是将命令直接传递给 shell,shell 按预期对其进行解析。

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

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

相关内容