Use aspas simples para evitar a expansão do shell no momento da definição
alias search='find 'pwd' -name '
Se eu quiser pesquisar um arquivo no sistema, use o seguinte comando:
sudo find 'pwd' -name filename.ext
Eu quero fazer um alias para uma palavra mais fácil como search
, então usei o comando:
alias search "find 'pwd' -name "
O problema é que o comando traduz a parte pwd
para o caminho real em que estou agora. Quando digito simplesmente alias
para ver a lista de aliases que vejo:
search find /path/to/my/homedir -name
Como posso evitar isso?
Modifique o comando como:
alias search="find . -name "
Por isso, sempre pesquisar apenas no diretório atual, ou seja, Diretório de trabalho atual
a substituição de comandos é expandida dentro de aspas duplas em (t) csh (que você parece estar usando) como em shells semelhantes a Bourne.
Então, em:
alias search "find 'pwd' -name "
Você está realmente fazendo algo como:
alias search 'find /some/dir -name '
Em que /some/dir
era o diretório atual no momento em que o comando alias
foi executado.
Aqui, você quer:
alias search 'find $cwd:q -name'
$cwd
é automaticamente definido por tcsh
(por isso é $PWD
em versões modernas, como em shells POSIX), então você pode usá-lo no lugar do menos eficiente e menos confiável 'pwd'
.
Usamos aspas simples (strongs) para que $cwd
não seja expandido.
$cwd:q
é passar o valor da variável como um argumento em vez de permitir que ele seja dividido.
Observe também que você não precisa do espaço depois de -name
acima.
Se você quisesse usar pwd
(por exemplo, para obter o caminho canônico (livre de links simbólicos) para o diretório de trabalho atual, como em algumas implementações pwd
como a do GNU, quando POSIXLY_CORRECT
não está no ambiente), você usaria:
alias search 'find "'pwd'" -name'
Embora isso não funcione se o caminho do diretório atual contiver caracteres de nova linha.
Note que você não pode usar sudo search
, já que aliases são apenas expandidos na posição de comando em (t) csh. Em shells POSIX você poderia fazer:
alias sudo='sudo '
Para dizer ao shell que a palavra seguinte sudo
também deve sofrer expansão de alias, mas esse truque não funciona em (t) csh.
O equivalente POSIX sh
(ou bash
/ zsh
/ ksh
...) seria:
alias search='find "$PWD" -name'
alias
é evocado uma vez que é chamado. Não há opção para chamar o comando quando chamar o apelido. Você tem que escrever uma função bash, onde você pode executar sub-comandos ou, melhor, usar .
(pesquisa no diretório atual) em vez de 'pwd'.
Tags alias search file-search