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 !!)")")"'
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.
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 ?
.
Eu usaria uma função:
gotofile () { pushd "$(find . -name "$1" -printf "%h\n")"; }
Alterar "." para algum diretório conforme apropriado ("~" talvez)