Su
在此處使用帶有 su 命令的腳本 I/O 重定向
這是我的腳本。我想用另一個使用者登錄並執行
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
嗎?我應該如何解決它?
您的程式碼有幾個問題。
su
從 讀取密碼/dev/tty
,而不是從讀取密碼stdin
,因此您不能像這樣重定向密碼。事實上,su
預設情況下是以目標使用者身份啟動一個 shell,所以如果你執行它root
:su - testuser <<- _EOF_ 123456 #password _EOF_
will 成功(
su
root 不需要密碼來執行此操作),但是123456
will 作為輸入傳遞給使用者的 shell,這就是為什麼當您執行腳本時會看到:-bash: line 1: 123456: command not found
如果您想以非 root 使用者身份執行此操作,您可能應該遵循 bahamt 的建議並使用
sudo
,可以將其配置為以不同使用者身份提供對特定命令的無密碼訪問。 2. 即使su
有效,它也會產生一個新的過程。在命令執行su
之前,命令已經退出(並返回到原始帳戶)ls
。所以你真正想要的是:su - testuser <<EOF ls -lih EOF