2

Я пытаюсь запустить команду от имени другого пользователя, но на отдельном экране и не могу понять синтаксис совершенно правильно. Если я разделю команды, я смогу заставить их работать, но когда я соберу их все воедино, ничего не произойдет.

Что я пытаюсь:

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

2 ответа2

2

Я думаю, что ваши вторые и третьи попытки имеют все правильные части, но не в порядке.  Пытаться

sudo su -s /bin/bash $USER_RUN_AS -c "screen -dmS $REMOTE_REPO_NAME \"$COMMAND 2>&1 >> $LOG_FILE_URI\" "

Я не думаю, что имеет смысл использовать трубу.

0
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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .