Linux

錯誤:su:必須從終端執行

  • July 3, 2021

當我嘗試使用下面給出的 shell 腳本登錄到 root 使用者時,它會拋出一個錯誤:

su: must be run from a terminal

srcpt ( scriptfile.sh) 如下所示:

su -s <<EOF
echo Now i am root
whoami
EOF

雖然我可以su從終端成功,但它預設登錄到root使用者。

僅供參考:當我們替換susudo. 我以普通使用者而不是 root 使用者身份執行此腳本。

錯誤的可能原因是什麼,我該如何解決?

注意:我想在不接觸/etc/sudoers文件的情況下完成它。

到目前為止,我在Google上搜尋的內容很可能歸結為語法/互動式 shell,但我不是專家!

下面對我有用,即使技術上 su 不應該在 shell 腳本中使用,sudo 也更安全。

這有效:

#!/bin/bash
exec su root --command 'echo -e "hello world" >> "/home/parallels/rootWasHere.txt"'

這也是如此:

#!/bin/bash

runAsRoot="
printf \"\nhey there\n\"
printf \"\nhello world, I am root\n\" >> \"/home/parallels/rootWasHere.txt\"
"
exec su root -c "$runAsRoot"

此外,關於 su 的 -s 選項,它僅根據手冊指定 shell。這並不意味著它也會執行之後/傳遞給-s的內容,所以我認為您可以執行以下操作:

#!/bin/bash

runAsRoot="
printf \"\nhey there\n\"
printf \"\nhello world, I am root and my shell is \$SHELL\n\" >> \"/home/parallels/rootWasHere.txt\"
"
exec su root -s /bin/zsh -c "$runAsRoot"

引用自:https://unix.stackexchange.com/questions/594264