Esiste un modo per eseguire uno script di shell su più righe collegandolo all'input standard della shell remota in fabric? O devo sempre scriverlo sul filesystem remoto, quindi eseguirlo, quindi cancellarlo? Mi piace inviare a stdin in quanto evita il file temporaneo. Se non ci sono API di fabric (e sembra che non ci sia la mia ricerca), presumibilmente posso usare direttamente il modulo ssh
. Fondamentalmente, desidero che fabric.api.run
non fosse limitato a un comando a 1 riga che viene passato alla shell come argomento della riga di comando, ma invece prenderebbe uno script multiriga completo e lo scrivere nell'input standard della shell remota.Esegui lo script della shell utilizzando il testo dello script fabric e piping sullo stdin della shell
Per chiarire voglio l'equivalente tessuto di questa riga di comando:
ssh somehost /bin/sh < /tmp/test.sh
Tranne in python il coude fonte script non sarebbe venuto da un file sul file system locale, sarebbe solo una stringa multilinea in memoria. Si noti che questa è una singola operazione logica e non esiste un file temporaneo sul lato remoto, il che significa che i guasti imprevisti e gli arresti anomali non lasciano file orfani. Se ci fosse una tale opzione in fabric (che è quello che sto chiedendo), non ci sarebbe bisogno di essere un file temporaneo su entrambi i lati e questo richiederebbe solo una singola operazione ssh.
Perché non basta fare qualcosa di simile a 'run ('comando1 && comando2 && comando2' ')? – Tshepang
Poiché A) non è facile da leggere, scrivere o mantenere come codice shell-in-python, B) il && influenza il flusso del codice in modi che potresti o non vuoi e C) il mondo è già pieno di shell esistente script che voglio eseguire tramite fabric senza convertirli in una singola riga. –