bash escaping find nested

Bash: los backsicks anidados en alias causan problemas



escaping find (3)

Los Backticks son la forma antigua de sustitución de comandos , y no se pueden anidar fácilmente. Sin embargo, el nuevo formulario $() anida fácilmente:

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

Estoy intentando escribir un alias que saltará al directorio descendiente de cwd que contiene un archivo especificado (o la primera aparición find encontrada de dicho nombre de archivo):

La siguiente combinación de comando logra el resultado deseado:

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

Sin embargo, parece que no puedo escapar de esta manera correcta para crear un alias de trabajo:

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

Salida:

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

Mi lógica es que los backticks necesitan escaparse en una cadena de comillas dobles con un single / y I can I do // no se convierte en una sola barra invertida dentro de una cadena, por lo que el segundo backsick anidado requiere 1 + 2 = 3.

¿Alguna sugerencia?


Un alias no puede tomar un argumento como $1 . Use una función en su lugar.

También use $(command) para la sustitución de comando en lugar de los backticks, ya que es más fácil anidar.

La función sería:

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


Backticks no ofrece anidamiento. Intenta usar la command substitution que tiene la sintaxis $(..)

En tu caso, será

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