Есть ли способ выполнить многострочный сценарий оболочки, направив его на стандартный ввод удаленной оболочки в fabric? Или я всегда должен записывать его в удаленную файловую систему, затем запускать, а затем удалять? Мне нравится отправлять на стандартный ввод, так как он позволяет избежать временного файла. Если нет API-интерфейса фабрики (и похоже, что он не основан на моих исследованиях), предположительно, я могу просто использовать модуль ssh
напрямую. По сути, я бы хотел, чтобы fabric.api.run
не ограничивалась однострочной командой, которая передается оболочке в качестве аргумента командной строки, а вместо этого брала бы полный многострочный скрипт и записывала его в стандартный ввод удаленной оболочки.
Чтобы уточнить, мне нужен тканевый эквивалент этой командной строки:
ssh somehost /bin/sh < /tmp/test.sh
За исключением python, исходный код сценария не будет исходить из файла в локальной файловой системе, это будет просто многострочная строка в памяти. Обратите внимание, что это единственная логическая операция, и на удаленной стороне нет временного файла, а это означает, что непредвиденные сбои и сбои не оставляют потерянных файлов. Если бы в ткани была такая опция (о чем я и спрашиваю), не нужно было бы иметь временный файл с обеих сторон, и для этого потребовалась бы только одна операция ssh.
run('command1 && command2 && command2'
)? - person tshepang   schedule 31.07.2012