Скрипт Bash не перемещается в папку, а только принимает ввод, когда «exit» набирается вручную - PullRequest
0 голосов
/ 01 июля 2019

У меня есть следующий bash-скрипт, который я пытаюсь использовать, чтобы ускорить обновление моего кода. По какой-то причине он застревает на cd /var/www/myapp/code и запрашивает ввод только тогда, когда я набираю exit для возврата пользователю root.

#!/bin/bash
# Pulls from remote repo and implements changes

su - rails
cd /var/www/myapp/code
git pull
expect "sername for 'https://bitbucket.org':"
send "myusername"
interact
expect "assword for 'https://bitbucket.org':"
send "mypassword"
interact
exit
cd /var/www/myapp/code
RAILS_ENV=production bundle exec rake assets:clobber
RAILS_ENV=production bundle exec rake assets:precompile
nginx -t && sudo nginx -s reload

Я пытался вручную ввести cd /var/www/myapp/code, но он все еще не выполняется, пока я не наберу exit.

1 Ответ

0 голосов
/ 02 июля 2019

Ну, это немного перефакторинг, но решение состоит в том, чтобы обернуть все в один вызов su - (user) -c "bla", который автоматически выйдет из подоболочки как (user), как только все команды будут выполнены. сделано.

Синтаксис:

su - (пользователь) -c "команда"

Вот как бы я это сделал:

Обратите внимание, что мы должны разбивать команды с помощью ';' и экранировать двойные кавычки с помощью '\'.

#!/bin/bash
# Pulls from remote repo and implements changes

su - rails -c "cd /var/www/myapp/code; 
  git pull;
  expect \"sername for 'https://bitbucket.org':\";
  send \"myusername\";
  interact;
  expect \"assword for 'https://bitbucket.org':\";
  send \"mypassword\";
  interact" # Now that the final command's ran,
            # we'll auto - exit the subshell

cd /var/www/myapp/code
RAILS_ENV=production bundle exec rake assets:clobber
RAILS_ENV=production bundle exec rake assets:precompile
nginx -t && sudo nginx -s reload
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...