$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 输出的问题)