Come accedere all'ultimo valore di ritorno in bash?

53

Scenario semplice: sto cercando un file wsdl perso nel bel mezzo di un progetto.

$ find -name '*.wsdl'
./some/very/very/long/way/to/some/lost/directory/filename.wsdl

Ora che so dov'è, voglio fare qualcosa con questo file, per esempio modificalo. Invece di copiare / incollare il percorso dietro il mio comando, è possibile utilizzare il percorso restituito da find in precedenza? Proprio come è possibile accedere all'ultimo argomento che hai digitato con !$ o all'ultimo comando con !! .
Ho letto che è stato possibile con $? , ma mi restituisce solo un errore: 0: command not found

$ echo $?
0: command not found
    
posta Anto 25.07.2013 - 15:46

3 risposte

29

Esegui il comando nella sostituzione di comando:

output=$( find -name '*.wsdl' )
echo "$output"

L'output è ora memorizzato nella variabile output che puoi usare tutte le volte che vuoi.

    
risposta data choroba 25.07.2013 - 15:57
59

Non esiste una variabile bash speciale per questo.

$? contiene il codice di uscita dell'ultimo comando (0 = successo, & gt; 0 = codice errore)

Puoi utilizzare l'output di find con il flag -exec , in questo modo:

 find -name  '*.wsdl' -exec emacs {} \;

Il {} viene sostituito con il nome file trovato da find . Questo eseguiva il comando per ogni file trovato. Se vuoi eseguire un comando con tutti i file trovati come argomenti, usa + all'estremità come segue:

  find -name '*.wsdl' -exec emacs {} +

Questo aprirebbe un'istanza di emacs con tutti i file .wsdl trovati in essa.

Una soluzione più generale è quella di memorizzare l'output in una variabile:

result=$(find -name '*.wsdl')
emacs $result

Funziona con tutti i comandi, non solo per trovare. Anche se potresti usare xargs :

  find -name '*.wsdl' | xargs emacs {}
    
risposta data ahilsend 25.07.2013 - 16:12
32

Ecco un trucco rapido che dovrebbe fare ciò che vuoi con un numero minimo di tasti, se non ti dispiace che l'ultimo comando venga eseguito due volte.

Utilizza backtick, ala:

'!!'

per es.

$ find . -name HardToFind.txt
some/crazy/path/to/HardToFind.txt
$ vim '!!'

* modifica: vedo la domanda "eventualmente abbindolata" sopra riportata contiene anche questa risposta. ancora pertinenti direttamente a questo, quindi lasciandolo, ma mi dispiace per il dupe.

    
risposta data Rob 12.09.2014 - 06:50

Leggi altre domande sui tag