BASH-выполнить команду с помощью sudo, но в отдельном экране

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

Я:

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
8
задан Mike Purcell
09.12.2022 13:25 Количество просмотров материала 3261
Распечатать страницу

2 ответа

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

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

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

2
отвечен Scott 2022-12-10 21:13
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.
0
отвечен Squeezy 2022-12-10 23:30

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх