CD en el directorio desde HISTORIA en un script bash o alias, por ejemplo, $(!!)

CD en el directorio desde HISTORIA en un script bash o alias, por ejemplo, $(!!)

A menudo quiero cambiar al directorio de un archivo en mi sistema de archivos, pero no estoy seguro de dónde está el archivo.

Lo busco así:

find -type f -name "myfile.txt"

Digamos, en aras de la simplicidad, que esto devuelve un resultado, por ejemplo.

/alguna/súper/larga/ruta/esa/no/quiero/escribir/miarchivo.txt

Entonces normalmente escribo esto:

cd $(dirname $(!!))

Para cambiar al directorio del archivo que estaba buscando...

¿Hay alguna forma de poner esto en un script de shell o alias, así que básicamente puedo escribir:

cdlast

y se ejecuta:

cd $(dirname $(!!))

usando la HISTORIA del shell? Lo probé y parece que falta el historial del shell en los scripts de bash.

Respuesta1

fc -sejecuta el comando anterior nuevamente:

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

O usar eval "$(history -p !!)":

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

Respuesta2

Puedes usar un alias.

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

Asegúrese de tener las comillas dobles allí. Esto evita que los resultados de las sustituciones de comandos se divida en palabras separadas si tienen espacios y se interpreten como patrones comodín si tienen caracteres especiales como *y ?.

Respuesta3

Yo usaría una función:

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

Cambiar "." a algún directorio según corresponda ("~" quizás)

información relacionada