2012-01-19 9 views
9

Sto cercando di scrivere un alias, che salterà alla directory discendente di CWD che contiene un file specificato (o la prima find trovato verificarsi di un tale nome del file):Bash: backticks nidificati a causare problemi di alias

la seguente combinazione comando raggiunge il risultato desiderato:

cd `dirname \`find -name 'MyFile.txt' | sed -n 1p\`` 

Tuttavia, non riesco a sfuggire a questo in modo corretto per creare un alias lavoro:

alias jump="cd \`dirname \\\`find -name '$1' | sed -n 1p\\\`\`" 

uscita:

/* 
dirname: missing operand 
Try `dirname --help' for more information. 
bash: cd: find: No such file or directory 

La mia logica è che backticks bisogno di fuggire in una stringa doppia quotata con un singolo \ e non posso fare \\ ottiene tradotta in una singola barra rovesciata all'interno di una stringa, quindi la seconda backtick nidificato richiede 1 + 2 = 3.

Qualche suggerimento?

risposta

13

Un alias non può prendere un argomento come $1. Usa invece una funzione.

Utilizzare anche $(command) per la sostituzione di comando invece che per i backtick, poiché è più semplice da annidare.

La funzione potrebbe essere:

jump() { 
    cd $(dirname $(find -name "$1" | sed -n 1p)) 
} 
+0

Grazie a tutti per le informazioni sul dollaro. Un ringraziamento speciale a dogbane per aver risposto alla domanda esatta che ho posto - come creare un alias usando questo approccio. – KomodoDave

3

Backticks non offre l'annidamento. Provare a utilizzare command substitution, che ha la sintassi $(..)

Nel tuo caso sarà

cd $(dirname $(find /path/to/search -name 'MyFile.txt' | sed -n 1p)) 
+0

backtick fare un'offerta di nidificazione, ma si deve sfuggire loro con backslash, che diventa rapidamente ingombrante per i molteplici livelli di nidificazione. La sintassi '$ {..}' è molto più facile per gli occhi. – mjuarez

2

backtick sono la vecchia forma di command substitution, e non si può loro nido facilmente. Tuttavia, il nuovo $()form fa nido facilmente:

cd $(dirname $(find -name 'MyFile.txt' | sed -n 1p)) 
Problemi correlati