CD no diretório do HISTÓRICO em um script bash ou alias, por exemplo, $(!!)

CD no diretório do HISTÓRICO em um script bash ou alias, por exemplo, $(!!)

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

Eu procuro assim:

find -type f -name "myfile.txt"

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

/some/super/long/path/that/eu não/quero/to/type/myfile.txt

Eu geralmente digito isto:

cd $(dirname $(!!))

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

Existe alguma maneira de colocar isso em um script de shell ou alias, para que eu possa basicamente digitar:

cdlast

e ele executa:

cd $(dirname $(!!))

usando o HISTÓRICO do shell? Eu tentei e o histórico do shell parece estar faltando nos scripts bash.

Responder1

fc -sexecuta 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 !!)")")"'

Responder2

Você pode usar um alias.

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

Certifique-se de ter aspas duplas ali. Eles evitam que os resultados das substituições de comando sejam divididos em palavras separadas se tiverem espaços e interpretados como padrões curinga se tiverem caracteres especiais como *e ?.

Responder3

Eu usaria uma função:

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

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

informação relacionada