Это мой простой bash:
cat test.sh
#!/bin/bash
echo "hello"
su - root -c /path/to/script.sh <<EOF
password
EOF
whoami
echo "good bye"
Но я получаю эту ошибку:
./test.sh
hello
su: must be run from a terminal
<current-user>
good bye
(ИЛИ ЖЕ)
cat test2.sh
#!/bin/bash
echo "hello"
sudo su <<EOF
password
EOF
whoami
echo "good bye"
Опять другая ошибка
(ИЛИ ЖЕ)
cat test3.sh
#!/bin/bash
echo "hello"
su root <<EOF
password
EOF
whoami
echo "good bye"
опять ошибка ...
когда я пытаюсь:
#!/bin/bash
echo "hello"
sudo -s <<EOF
<password>
echo Now I am root
id
echo "yes!"
EOF
whoami
echo "good bye"
Тогда вывод:
./script.sh
hello
[sudo] password for <user>:
Я также изменил свой сценарий на:
#!/usr/bin/expect -f
spawn sudo -s <<EOF
expect "assword for user:"
send -- "password\r"
expect eof
и вывод:
spawn sudo -s <<EOF
[sudo] password for user:
/bin/bash: <<EOF: command not found
Также, какой вывод which sh
является /bin/sh
Как я могу устранить ошибку в этих трех скриптах?