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.shdiretamente 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
forpara 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.)