Echo no arquivo retorna Nenhum arquivo ou diretório

2

Estou me perguntando por que meu script simples não funciona:

#!/usr/bin/env bash
user_variable='$1'
echo "export USER_VAR=$user_variable" > ~$user_variable/.filename

Quando eu inicio o script, tenho este erro:

./script.sh admin: line 3: ~admin/.filename: No such file or directory 

É claro que o diretório ~ admin existe:

~ # cd ~admin
/share/homes/admin #

E se eu testar esse tipo de comando diretamente na linha de comando, ele funciona:

# echo "test" > ~admin/.filetest
#

Então, por que meu comando echo não funciona no arquivo de script?

Obrigado.

    
por mickaelb91 21.01.2015 / 00:22

2 respostas

4

De bash(1) :

The order of expansions is: brace expansion, tilde expansion, parameter, variable and arithmetic expansion and command substitution (done in a left-to-right fashion), word splitting, and pathname expansion.

Ou seja, ele faz a expansão do til antes da expansão da variável, por isso não substitui $user_variable com $1 (que, eu suponho, é " admin ") até depois de ter tentado e falhado em processar o ~ - porque está procurando um usuário chamado " $user_variable " em vez de um usuário chamado " admin ".

    
por 21.01.2015 / 00:34
0

A ordenação de expansões aqui não impede que você use a variável de acordo com sua intenção original. Normalmente eval pode ajudar quando se trata de comandos dinâmicos.

eval "echo \" exportar USER_VAR = $ user_variable \ "> ~ $ user_variable / .filename"

    
por 13.02.2016 / 22:21