Tentando usar 'pwd' dentro de um alias dando resultados inesperados [duplicado]

5

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?

    
por PanthersFan92 16.08.2016 / 10:54

4 respostas

12

Use aspas simples para evitar a expansão do shell no momento da definição

alias search='find 'pwd' -name '
    
por 16.08.2016 / 11:03
4

Modifique o comando como:

alias search="find . -name "

Por isso, sempre pesquisar apenas no diretório atual, ou seja, Diretório de trabalho atual

    
por 16.08.2016 / 10:59
4

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'
    
por 16.08.2016 / 11:18
0

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'.

    
por 16.08.2016 / 11:01