Bash

以其他使用者身份執行 Alias 命令失敗

  • September 25, 2017

不知道我在這裡做錯了什麼。

User2 在它的 .bash_profile 中獲取一個文件來設置環境特定的別名。

# .bash_profile
source $HOME/set_environment_shortcuts

在 $HOME/set_environment_shortcuts 裡面(這裡有很多別名)。例子:

alias startservices="verylongcommand"

現在我想’從另一個使用者開始服務。

[User1@server1 ~]$ sudo su -l User2 -c '. ~/.bash_profile; startservices'
-bash: startservices: command not found

runuser 命令產生相同的結果。

[User1@Server1 ~]$ sudo runuser -l User2 -c '. ~/.bash_profile; startservices'
-bash: startservices: command not found

別名不能以這種方式工作嗎?

請注意,當完全繞過別名時,該命令有效。

當 shell 不是互動式時,別名不會展開,除非expand_aliasesshell 選項設置為shopt -s expand_aliases.

別名是互動式使用的快捷工具。對於任何類型的腳本,請改用 shell 函式:

startservices () {
   # commands go here
}

Shell 函式在許多方面都比別名靈活得多。對於初學者,它們能夠像 shell 腳本一樣接受參數:

startservices () {
   user="$1"
   service="$2"
   # code to start service "$service" as user "$user"
}

您不必.bash_profile明確地獲取其他使用者的來源。改為使用sudo -i。這將啟動一個登錄 shell,它會.bash_profile在啟動時讀取:

$ sudo -i -u User2 startservices

這需要startservices是 中的腳本或其他外部實用程序、在$PATHUser2shell 啟動文件中定義的 shell 函式User2,或者是在 的 shell 啟動文件中定義的別名(使用expand_aliasesset 執行的 shell)User2

另請參閱是否有充分的理由執行 sudo su?

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