我尝试以其他用户身份运行命令,但在分离的屏幕内,似乎无法正确使用语法。如果我拆分命令,我可以使其工作,但当我将它们拼凑在一起时,什么也没有发生。
我正在尝试:
COMMAND='COUNTER=0; while [ $COUNTER -lt 10 ]; do echo Count: $COUNTER; let COUNTER=COUNTER+1; sleep 15; done'
if [ $USER_CURRENT = $USER_RUN_AS ]; then
screen -dmS $REMOTE_REPO_NAME -c "$COMMAND 2>&1 >> $LOG_FILE_URI"
else
# This works, but I would like it to run in detached screen
# sudo su -s /bin/bash $USER_RUN_AS -c " $COMMAND 2>&1 >> $LOG_FILE_URI "
# Tried piping screen to the sudo command
# screen -dmS $REMOTE_REPO_NAME $COMMAND | sudo -S su -s /bin/bash $USER_RUN_AS 2>&1 >> $LOG_FILE_URI
# Tried passing the command to screen
screen -dmS $REMOTE_REPO_NAME -c "$COMMAND 2>&1 >> $LOG_FILE_URI | sudo -S su -s /bin/bash $USER_RUN_AS"
fi
答案1
我认为你的第二次和第三次尝试都正确,但顺序不对。尝试
sudo su -s /bin/bash $USER_RUN_AS -c "screen -dmS $REMOTE_REPO_NAME \"$COMMAND 2>&1 >> $LOG_FILE_URI\" "
我认为使用管道没有意义。
答案2
screen -dmS $REMOTE_REPO_NAME sudo su - $USER_RUN_AS -c "$COMMAND 2>&1 >> $LOG_FILE_URI"
就是你所需要的。只需运行 sudo之内你的屏幕。 -C切换到屏幕是“读取配置文件”。这可能不是您想要的。
-c file
override the default configuration file from "$HOME/.screenrc" to
file.