2014-11-19 6 views
2

Мне нужно ssh в машину и выполнить кучу команд под sudo bash. Вот то, что я пробовал:Heredoc для вложенной команды в bash

sshpass -p "vagrant" ssh [email protected] "sudo bash -i -c <<EOF 
    echo 
    ls 
    echo 
EOF" 

Но он бросает мне 'bash: -c: option requires an argument\n'. Как я могу это исправить?

+2

Параметр '-c' опция требует аргумент в командной строке, а не Heredoc. Heredoc - это перенаправление ввода. – Jdamian

+0

Просто удалите '-c', и он будет работать нормально. – anubhava

+0

Кроме того, '-i' означает« интерактивный », не так ли? Как это возможно, если вы перенаправляете свой стандартный ввод? – Jdamian

ответ

3

Вы должны удалить -c из командной строки, чтобы сделать его принять Heredoc:

sshpass -p "vagrant" ssh [email protected] "sudo bash <<EOF 
    echo 
    ls 
    echo 
EOF" 

Также вы можете удалить (интерактивный) вариант -i тоже.

bash -c ожидает от вас, чтобы обеспечить все команды в командной строке, так это может работать также:

sshpass -p "vagrant" ssh [email protected] "sudo bash -c 'echo; ls; echo'"