Não cite nem escape sua sequência de limite heredoc (ou seja, use EOF
em vez de \EOF
ou "EOF"
), caso contrário, variáveis especiais como $
não serão interpretadas. Consulte aqui para mais informações e exemplos (por exemplo, Exemplo 19-7).
Aqui está um script mínimo que funciona:
$ cat test.sh
#!/bin/bash
sudo su - $(whoami) <<EOF
./test2.sh "$1"
EOF
$ cat test2.sh
#!/bin/bash
foo=$1
echo "$foo"
$ ./test1.sh "/path/to/file"
"/path/to/file"
Observe que:
- Não há necessidade do heredoc. Basta ligar
./test2.sh
diretamente apóssudo
:sudo -u $(whoami) test2.sh "$1"
- Você não deve repetir a saída de
ls
. - Não há necessidade de fazer um loop
for
para pesquisar um único arquivo. Basta ligar para o script diretamente com o nome dele.
Você também deve citar suas variáveis, ou seja:
- Execute seu script com
./executeADM.sh "/path/with white/space"
- Chame
./"$entry" "$1"
no seu script - Em seu outro script, use
cd "$path"
Em geral:
- Sempre duplique as variáveis. (Não faça uma citação simples - eles não se expandirão.)
- Não use uma variável chamada
path
. (Por mais que você não usasse variáveis chamadasuser
,home
, etc.)