O Bash não pode expandir os backticks interativamente

5

No RHEL5.2 (bash 2.3.25) eu posso cd 'pwd' / [TAB] e pwd é substituído em meu diretório de trabalho atual, usando a saída de pwd (1).

Como posso conseguir a mesma funcionalidade no Ubuntu 9.10 (bash 4.0.33).

Li questões anteriores que se referem a backticks como sendo antigas e depreciadas. Eu não sabia disso. Eu posso entender que aninhamento deles pode ser difícil, e eu uso $ {} é scripts, mas eu gostaria de poder avaliar comandos interativamente no shell.

    
por The_Viper 19.05.2011 / 14:17

3 respostas

4

Este é um recurso que não é um bug.

Pense no cenário desta maneira: Para fazer essa conclusão, o shell teria que EXECUTAR o comando nos backticks. Isso poderia causar consequências negativas muito sérias se fosse algo que não fosse feito mais de uma vez, que levasse muito tempo para ser executado, etc.

Para fazer a expansão, o bash precisa apenas de uma string que seja um caminho, não de um programa que precise ser executado para que uma cadeia seja concluída. Considere a sugestão para usar ./ como caminho para o trabalho atual diretório bem aconselhado!

Os backticks não são antigos nem foram preteridos, embora a sintaxe $() mais recente seja geralmente preferida nos dias de hoje. No entanto, no seu exemplo, usar um comando é imprudente. Backticks e comando devem ser usados com parcimônia e somente quando outra sintaxe não for possível.

    
por Caleb 20.05.2011 / 07:39
3

Tente

cd ./ TAB

em vez disso.

cd $VAR/...
cd $(cmd)/...

não trabalhe para mim também. Talvez você possa comparar os arquivos / etc / bash_completion.

    
por user unknown 19.05.2011 / 15:07
1

Existem situações em que "$ PWD /" é necessário em vez de "./", portanto, não deve ser sugerido usar sempre "./" em vez de "$ PWD /". Um exemplo é quando você faz um link simbólico.

Suponha que você esteja em / alguma outra pasta. Agora você executa o seguinte comando:

ln -s ./file /target/file

Isso se torna um link quebrado. O que você realmente precisa fazer é:

ln -s $PWD/file /target/file

É muito ineficiente digitar o caminho inteiro. Esse problema é independente de problemas de "reprovação", pois o symlink simplesmente não funciona dessa maneira. Assim, sugiro que você registre um bug para corrigir esse problema.

    
por Leeq 07.11.2011 / 15:40