scp, globbing e diferentes shells

4

No outro dia no trabalho, tentei fazer

scp remotehost:~/*.txt .

e recebi um erro sobre o * , *.txt file not found desculpe, não no trabalho e esqueci o erro exato

na minha estação de trabalho eu corro zsh 4.3. no remotehost bash é o shell padrão, e a versão de zsh é mais antiga ( 4.2 vs 4.3 ). Eu então tentei mudar para bater na minha estação de trabalho e fazer exatamente o mesmo comando. Desta vez funcionou. Qual é a causa raiz disso. Existe alguma maneira de fazer globbing, ou curingas entre esses dois sistemas (sem mudar para bash)?

    
por xenoterracide 09.01.2011 / 06:38

1 resposta

7
O comportamento do

zsh é um pouco diferente aqui do que a maioria dos outros shells. Outras shells, como o bash, tentam expandir os curingas. Se eles não puderem expandir para nada, eles passarão a string literal (contendo os curingas) para o aplicativo. Mas o zsh não faz isso (bem, existe uma opção para isso, fazer ou não). O zsh imprimirá esse erro e não executará o comando. Você pode substituir isso escapando do caractere curinga, se realmente desejar que ele seja passado para o aplicativo. Neste caso você faz desde que você quer que o shell do outro lado a expanda. Então use:

scp remotehost:\*.txt .

Este é realmente o comportamento correto, pois se você tivesse alguns arquivos * .txt locais em sua casa, eles seriam expandidos para um nome que talvez não existisse no controle remoto. Não é isso que você quer.

    
por 09.01.2011 / 09:53