CD no diretório de HISTORY em um script bash ou alias, e. $ (!!)

4

Muitas vezes eu quero mudar para o diretório de um arquivo no meu sistema de arquivos, mas não tenho certeza onde está o arquivo.

Eu procuro por isso assim:

find -type f -name "myfile.txt"

Digamos, por uma questão de simplicidade, que isso retorne um resultado, por exemplo.

/ algum / super / long / path / que / eu não quero / para / type / myfile.txt

Eu geralmente escrevo isto:

cd $(dirname $(!!))

Para mudar para o diretório do arquivo que eu estava procurando ....

Existe alguma maneira de colocar isso em um shell script ou alias, então eu basicamente posso digitar:

cdlast

e é executado:

cd $(dirname $(!!))

usando o HISTORY do shell? Eu tentei, e o histórico do shell parece estar faltando em scripts bash.

    
por Brad Parks 23.04.2013 / 19:21

3 respostas

4

fc -s executa o comando anterior novamente:

alias cdlast='cd "$(dirname "$(fc -s 2> /dev/null)")"'

Ou use eval "$(history -p !!)" :

alias cdlast='cd "$(dirname "$(eval "$(history -p !!)")")"'
    
por 23.04.2013 / 21:42
3

Você pode usar um alias.

alias cdlast='cd "$(dirname "$(eval $(history -p !!))")"'

Verifique se você tem aspas duplas lá. Eles impedem que os resultados das substituições de comandos sejam divididos em palavras separadas, se tiverem espaços e forem interpretados como padrões de caractere curinga, se tiverem caracteres especiais, como * e ? .

    
por 23.04.2013 / 19:31
2

Eu usaria uma função:

gotofile () { pushd "$(find . -name "$1" -printf "%h\n")"; }

Alterar "." para algum diretório conforme apropriado ("~" talvez)

    
por 23.04.2013 / 21:44