Mi condición es como a continuación. ¿Alguien podría ayudar, por favor?
SEARCH="find `pwd` -name" bash> $SEARCH resources.xml | grep $SEARCH_DIR | grep $1 | grep 'cells'
Pero no pwd
el pwd
como se menciona en esa variable.
Por favor ayuda
alias SEARCH='find . -name'
O
SEARCH() { find . -name "$1"; }
Uso
SEARCH resources.xml | ...
Tenga en count que SEARCH
no es una variable. Puede definir el command como una variable ( SEARCH='find . -name'
) pero la definición de alias o function es una práctica más habitual.
Digamos que el directory actual es /original/directory
en el momento en que se evalúa la línea SEARCH=…
y /later/directory
en el momento en que se evalúa la línea $SEARCH …
La sustitución de command `pwd`
se evalúa en el momento en que se define la variable SEARCH
, por lo que SEARCH
se configura para find /original/directory -name
. Si el directory actual en ese momento no contiene ningún espacio en blanco o caracteres comodín, entonces $SEARCH resources.xml
llama más adelante en ese directory, es decir, find /original/directory -name resources.xml
.
Si el directory actual original contiene espacios en blanco o comodines, esto no funcionará. Rellenar un command en una variable como esta no funciona, excepto en casos muy simples. Ver ¿Por qué mi script de shell se ahoga en espacios en blanco u otros caracteres especiales?
Si desea ejecutar find
in /later/directory
, entonces puede ejecutar find .
. Pero una variable no es la herramienta correcta aquí. Una variable es para almacenar una cadena. Un command con parameters no es una cadena, es una list de cadenas. Y un fragment de código de shell se puede almacenar en una cadena, pero $SEARCH
no ejecuta el valor de SEARCH
como fragment de código de shell (una vez más, ver ¿Por qué mi script de shell se atasca en espacios en blanco u otros caracteres especiales? ). Para almacenar un fragment de código de shell para su uso posterior, defina una function.
SEARCH () { find "$PWD" -name "$@" } … SEARCH resources.xml | …
Una vez más, esto ejecuta find
in /later/directory
. Si desea ejecutar find
en el /original/directory
, la mejor manera es almacenar ese directory en una variable y usar esa variable más adelante.
original_directory="$PWD" SEARCH () { find "$original_directory" -name "$@" } … SEARCH resources.xml | …