Eu tenho o seguinte script. É um caso de teste simples, em que a
qualquer valor de string e b
deve ser um caminho.
#!/bin/bash
alias jo "\
echo "please enter values "\
read a \
read -e b \
echo "My values are $a and $b""
No entanto, sempre que tento executar ./sample.sh, recebo os seguintes erros:
./sample.sh: line 3: alias: jo: not found
./sample.sh: line 3: alias: echo please: not found
./sample.sh: line 3: alias: enter: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: read a read -e b echo My: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: are: not found
./sample.sh: line 3: alias: and: not found
./sample.sh: line 3: alias: : not found
e quando tento source sample.sh
, obtenho o seguinte:
a: Undefined variable.
Meu objetivo era tornar isso um alias para que eu pudesse obter esse script e apenas executá-lo para executar a linha de comandos. Alguém pode olhar para isso e me informar qual é o erro?
command-line
bash
scripts
alias
Jovin Miranda
fonte
fonte
Respostas:
Você tem alguns problemas aqui
ao contrário de
csh
, embash
(e em outros invólucros tipo Bourne), os aliases são atribuídos com um=
sinal, por exemploalias foo=bar
aspas não podem ser aninhadas assim; Nesse caso, você pode usar aspas simples ao redor do alias e aspas duplas dentro
a barra invertida
\
é um caractere de continuação de linha : sintaticamente, ele transforma seu comando em uma única linha (o oposto do que você deseja)então
Teste: primeiro criamos o arquivo:
então
Se você deseja usar o alias dentro de um script, lembre-se de que os aliases são ativados apenas por padrão em shells interativos: para habilitá-los dentro de um script, você precisará adicionar
Independentemente de tudo acima, considere usar uma função shell em vez de um alias para coisas como esta
fonte
$a
e$b
seria expandido em tempo de definição, não quando o alias é executado.Acostume-se a usar funções no shell do tipo POSIX. Você não tem nenhum dos problemas de cotação:
fonte