2017-01-18 24 views
0

我在使用vagrant ssh执行多个命令时遇到问题。具有多个参数的流浪ssh

为了在流浪的环境中运行一些测试,我执行以下命令:

  1. vagrant ssh app
  2. sudo su deploy
  3. cd /some/dir/for/test
  4. source env/bin/activate
  5. python manage.py test

我设法达到第3点,但无法执行第4点。我的尝试如下:

vagrant ssh app -- -t 'cd /some/dir/for/test; sudo su deploy' 

但sudo命令后,如果我写了更多的命令,他们不会执行。

我还需要将测试输出重定向到流浪环境之外的原始shell。

回答

1

你可以做到这一切在一个单一的命令:

vagrant ssh app -- -t 'sudo -u deploy /some/dir/for/test/env/bin/python /some/dir/for/test/env/manage.py test' 

在这里你可以避开无用su呼叫通过给出参数sudo所以它运行一个命令,给定用户,使用-u说法。然后bin/activate命令只是改变环境,所以之后调用的python是env/bin/python中的那个,所以你可以直接使用它的全路径来调用它。为了您的所知,如果您想在单个sudo调用中链接由;分隔的两个命令,则应在sudo命令中产生一个shell,即sudo sh -c "run this; run that"

+0

真棒谢谢! –