Su

在此處使用帶有 su 命令的腳本 I/O 重定向

  • February 14, 2012

這是我的腳本。我想用另一個使用者登錄並執行ls -lih

#!/bin/bash

su - testuser <<- _EOF_
   123456 #password
   _EOF_

ls -lih

這是我執行腳本時的輸出:

./script.sh
-bash: line 1: 123456: command not found
total 127M
262210 drwxr-xr-x.  9 mazimi mazimi 156K Feb 14 19:05 Desktop
262211 drwxr-xr-x.  2 mazimi mazimi  36K Feb 14 18:26 Downloads
278106 -rw-r--r--   1 mazimi mazimi  64K Feb 14 22:30 ems.cfg
... # list of files

ls -lih不在我的主目錄中testuser嗎?我應該如何解決它?

您的程式碼有幾個問題。

  1. su從 讀取密碼/dev/tty,而不是從讀取密碼stdin,因此您不能像這樣重定向密碼。事實上,su預設情況下是以目標使用者身份啟動一個 shell,所以如果你執行它root
su - testuser <<- _EOF_
123456 #password
_EOF_

will 成功(suroot 不需要密碼來執行此操作),但是123456will 作為輸入傳遞給使用者的 shell,這就是為什麼當您執行腳本時會看到:

-bash: line 1: 123456: command not found

如果您想以非 root 使用者身份執行此操作,您可能應該遵循 bahamt 的建議並使用sudo,可以將其配置為以不同使用者身份提供對特定命令的無密碼訪問。 2. 即使su有效,它也會產生一個新的過程。在命令執行su之前,命令已經退出(並返回到原始帳戶)ls。所以你真正想要的是:

su - testuser <<EOF
ls -lih
EOF

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