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))