Похожие вопросы

вывод awk печать в два отдельных файла
Скрипт Homebrew для переустановки формул
Скрипт Bash, который автоматически меняет раскладки клавиатуры и мыши на основе активного окна
Запуск jpegoptim в cronjob раз в неделю, на CentOS из cPanel, только для файлов, добавленных в течение прошлой недели?
Использование find или grep для поиска имен файлов с акцентированными символами из другой системы кодирования (Windows в Linux)
Использование systemd для выполнения интерактивного сценария (whiptail) после многопользовательского.цель, но до экрана входа в систему
apt-get install не работает в WSL
Запустить скрипт BASH в Cygwin
чтение команды с таймаутом для нетерминального ввода в bash
Выполнить команду из результата grep
Загрузка нескольких файлов с ftp-сервера с помощью сценария bash
Как переместить курсор командной строки на bash с помощью мыши
iTerm2: получить номер вкладки из оболочки bash
не удается увеличить переменную внутри цикла в сценарии bash
утилита командной строки для записи с микрофона

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
5
задан Mike Purcell
источник

2 ответов

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

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

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

2
отвечен Scott 2013-07-22 17:08:52
источник
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 2013-07-22 17:39:30
источник

Другие вопросы bash linux