Sto scrivendo uno script per ssh in un elenco di macchine e confrontare una variabile con un altro valore .. Ho incontrato un problema (ho un paio di soluzioni alternative, ma a questo punto sono mi chiedo solo perché questo metodo non funziona).Messy bash variabile
VAR=`ssh $i "awk -F: '/^bar/ {print \$2}' /local/foo.txt"`
($ sarei un hostname I padroni di casa sono attendibili, senza richiesta della password è dato.)
Esempio di foo.txt:
foo:123456:abcdef
bar:789012:ghijkl
baz:345678:mnopqr
Sto assumendo che sia un problema con le virgolette, o è necessario da qualche parte. Ho provato diversi metodi (diverse quotazioni, usando $() invece di ``, ecc.) Ma non riesco a farlo bene. Il mio script funziona correttamente utilizzando il seguente:
VAR=`ssh $i "grep bar /local/foo.txt" | awk -F: '{print \$2}'`
Come ho detto, solo una curiosità, ogni risposta è apprezzata.
Ho dimenticato di pubblicare quale era il mio output: awk sta sputando l'intera riga con corrispondenza, non la seconda sezione. Giocando con le virgolette e un po 'mi è sembrato di avere un errore riguardo al comando "{print" non trovato ecc., Come se ci fosse una nuova linea da qualche parte.
Si potrebbe ottenere più risposte ServerFault, legati alla mia domanda lì: http://serverfault.com/ques tions/99886/ssh-not-redirecting-stdout-to-local-terminal –
Cosa succede se si rimuove il caret dal primo esempio? Forse c'è un personaggio invisibile all'inizio della linea. – danben
@Lance Roberts - questa domanda riguarda awk, non ssh, e come tale è appropriato per l'overflow dello stack. – danben