cp não funciona no script mas funciona no terminal

7

Agora, isso é um problema estranho, eu tenho esse tipo de script:

CWD="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
RESOURCES_PATH="${CWD}/resources"

PROJECT_NAME="something"

DRUSH_ALIASES_EXAMPLE_PATH="${RESOURCES_PATH}/example.aliases.drushrc.php"
DRUSH_ALIASES_PATH="~/.drush/${PROJECT_NAME}.aliases.drushrc.php"

cp ${DRUSH_ALIASES_EXAMPLE_PATH} ${DRUSH_ALIASES_PATH}
echo "cp ${DRUSH_ALIASES_EXAMPLE_PATH} ${DRUSH_ALIASES_PATH}"

Quando estou tentando executar esse tipo de script, estou recebendo o erro: "cp: Não é possível criar o arquivo regular" ~ / .drush / something.aliases.drushrc.php ". Não existe esse arquivo ou diretório "

Mas o engraçado é que se eu copiar a saída de "echo" e colar diretamente no terminal, o comando funcionará bem. Estou confuso, alguma idéia do que pode estar errado com o script acima?

    
por Łukasz Zaroda 02.12.2013 / 13:55

3 respostas

11

Tente usar $HOME/.drush... em vez de ~/.drush.... , o "~" parece não ser expandido para seu diretório pessoal.

    
por 02.12.2013 / 14:13
1

O caractere til% ~ significa que o diretório pessoal funciona apenas no início de uma palavra, no início de um valor atribuído ou (para fins de atribuições PATH) após dois pontos em um valor atribuído. Não deve ser citado.

Como ~ é expandido pelo shell, o fato de você vê-lo relatado por cp significa que você tem um problema de expansão do shell.

Aqui o til está entre aspas duplas, por isso não é expandido. Use um destes:

DRUSH_ALIASES_PATH=~/".drush/${PROJECT_NAME}.aliases.drushrc.php"
DRUSH_ALIASES_PATH="$HOME/.drush/${PROJECT_NAME}.aliases.drushrc.php"
    
por 03.12.2013 / 01:11
0

Usando bash você também pode usar a subcategoria string interna via expansão de parâmetro para substituir o caractere til ~ com o valor de $HOME .

Não é muito elegante, mas pode ser útil se você não tiver certeza sobre um possível caractere ~ em uma string de caminho de arquivo passada para você (não é o caso aqui).

unset HOME
HOME="$(eval 'echo ~')"

- cp ${DRUSH_ALIASES_EXAMPLE_PATH} ${DRUSH_ALIASES_PATH}
+ cp "${DRUSH_ALIASES_EXAMPLE_PATH/#\~/${HOME}}" "${DRUSH_ALIASES_PATH/#\~/${HOME}}"
    
por 10.12.2013 / 15:04