Tentando compilar um caminho com espaços, falha quando o script, mas ecoando e colando, é bem-sucedido? [fechadas]

0

Eu tenho um script que está tentando copiar um diretório de um caminho que inclui espaços com escape de barra invertida e é armazenado em uma variável de cadeia para um subdiretório do diretório de trabalho.

Quando executo o script, recebo o uso de cp :

usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory

No entanto, se eu fizer o eco do comando, ele estará perfeitamente correto. E mesmo que eu copie e cole a linha ecoada de volta no terminal, ela será executada bem!

rm -rf Payload
mkdir Payload
echo cp -Rf $APP_PROTOTYPE/ Payload/${BUNDLE_NAME}.app
cp -Rf $APP_PROTOTYPE/ Payload/${BUNDLE_NAME}.app

Não consigo entender por que ele não seria executado corretamente no Bash, mas colando manualmente o comando em funcionamento sem falhas. Além disso, eu não posso nem dizer qual é o problema porque funciona bem quando eu faço manualmente (no entanto, eu obviamente suspeito dos espaços). O código de saída de cp é 64, se isso ajudar em tudo.

$APP_PROTOTYPE parece com .golden_repo/Production\ Releases\ Only/Kiosk/1.0.3/Prototype/Kiosk.app e observe que .golden_repo é um compartilhamento smbfs montado.

    
por devios1 30.10.2013 / 20:21

1 resposta

5

Você precisa citar partes de seu comando que contêm espaços para evitar que a divisão de palavras as torne em dois argumentos diferentes:

cp -Rf "$APP_PROTOTYPE/" "Payload/${BUNDLE_NAME}.app"

deve fazer o que quiser. Observe que você precisa de aspas duplas em vez de aspas simples para permitir a interpolação de variáveis dentro das aspas.

A saída de echo não significa que o comando deva funcionar corretamente. Ao contrário de cp , que lida com os nomes dos caminhos, echo é perfeitamente aceitável, com um argumento se tornando vários devido à divisão de palavras:

echo 'a b'

e

echo a b

devem ambos produzir o mesmo resultado.

    
por 30.10.2013 / 20:28

Tags