Linux
錯誤:su:必須從終端執行
當我嘗試使用下面給出的 shell 腳本登錄到 root 使用者時,它會拋出一個錯誤:
su: must be run from a terminal
srcpt (
scriptfile.sh
) 如下所示:su -s <<EOF echo Now i am root whoami EOF
雖然我可以
su
從終端成功,但它預設登錄到root使用者。僅供參考:當我們替換
su
為sudo
. 我以普通使用者而不是 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"