Digamos que o diretório atual seja /original/directory
no momento em que a linha SEARCH=…
for avaliada e /later/directory
no momento em que a linha $SEARCH …
for avaliada.
A substituição do comando 'pwd'
é avaliada no momento em que a variável SEARCH
é definida, portanto SEARCH
é definido como find /original/directory -name
. Se o diretório atual nesse momento não contiver espaços em branco ou caracteres curinga, o $SEARCH resources.xml
chamará find
nesse diretório, ou seja, find /original/directory -name resources.xml
.
Se o diretório atual original contiver espaços em branco ou curingas, isso não funcionará. Encher um comando em uma variável como esta não funciona, exceto em casos muito simples. Veja Por que meu script de shell engasgar com espaço em branco ou outros caracteres especiais?
Se você quiser executar find
em /later/directory
, poderá executar find .
. Mas uma variável não é a ferramenta certa aqui. Uma variável é para armazenar uma string. Um comando com parâmetros não é uma string, é uma lista de strings. E um snippet de código de shell pode ser armazenado em uma string, mas $SEARCH
não executa o valor de SEARCH
como um trecho de código de shell (mais uma vez, veja Por que meu shell script engasga com espaço em branco ou outros caracteres especiais? / a>). Para armazenar um fragmento de código de shell para uso posterior, defina uma função.
SEARCH () {
find "$PWD" -name "$@"
}
…
SEARCH resources.xml | …
Mais uma vez, isso executa find
em /later/directory
. Se você quiser executar find
em /original/directory
, a melhor maneira é armazenar esse diretório em uma variável e usar essa variável posteriormente.
original_directory="$PWD"
SEARCH () {
find "$original_directory" -name "$@"
}
…
SEARCH resources.xml | …