sudo source 找不到命令

2022-08-21 15:27:11 字數 1741 閱讀 6132

source /etc/bash.bashrc

唯一的事情是 – 新環境變數僅供我當前使用者使用 – 並且在使用sudo時被忽略。當我關閉終端會話並重新加入時,它們才可用於sudo。

當我嘗試使用時:

sudo source /etc/bash.bashrc

我收到錯誤:

sudo: source: command not found

是否有一種簡單的方法可以載入sudo的新bash配置檔案設定而無需關閉終端並重新啟動?

– 最初,我使用了一些引用變數的安裝程式指令碼。我發現當我直接呼叫指令碼時他們可以訪問變數(雖然這會導致後來建立目錄的問題,因為我需要root),使用sudo呼叫安裝指令碼不會。

我用這些簡單的命令測試證明了這一點:

echo $env_variable

sudo echo $env_variable

第乙個輸出變數的值,但第二個不輸出任何值。

問題是source是乙個bash build-in命令(不是程式 – 如lsgrep)。我認為一種方法是以root使用者身份登入,然後執行source命令。

sudo -s

source /etc/bash.bashrc

問題不在於source是shell內建命令。它實際上是扔你command not found錯誤的事實,但並不意味著它會起作用。

實際問題是環境變數如何工作。它們的工作方式如下:每次啟動新程序時,如果沒有任何反應,它將繼承其父程序的環境。因此,使用子shell(例如在bash例項中鍵入bash)並檢視env的輸出應該得到與其父級相似的結果。

但是,由於sudo的工作方式(如其聯機幫助頁中所述),sudo嘗試剝離使用者的環境並為替換使用者建立」default」環境,以便執行命令執行,就像呼叫它的使用者一樣呼叫使用者(這是預期的行為),因此執行nautilus作為sudo nautilus應該在/root資料夾中開啟乙個資料夾,而不是/home/yourusername

所以:做一些像sudo source script.sh然後再做sudo command的事情,即使它起作用,它也不會成功地將任何變數設定為後面的sudo command

為了傳遞環境變數,您可以告訴sudo保留環境(通過-e開關;在sudoers檔案中具有適當的許可權)和/或將命令設定為sudo var1=value1 var2=value2 command

作為marcos says,您的主要問題是source是乙個shell內建命令,它只影響執行它的shell程序。

簡單的解決方案是以root身份啟動乙個新的shell,bash會在啟動時自動讀取/etc/bash.bashrc。這就像說的一樣簡單

sudo bash

關閉和重新開放終端不應該改變事情。預設情況下,sudo剝離環境。要禁用它,請將-e新增到sudo。

ifconfig找不到命令

出現這樣的問題的原因是 你在從普通使用者切換到root使用者的時候 用的是su 或者su root切換的 這樣不行 不會讀取root使用者的私有設定檔案!因此環境變數path不會包含 sbin usr sbin這樣的目錄 因此你直接輸入這些目錄下的命令時 就會提示找不到該命令!解決問題的2個簡單方法...

sudo go 找不到命令

錯誤描述 環境 centos7.1 x64 golang 1.9.3 golang目錄 home moonlightwatch go 環境變數配置 export goroot home moonlightwatch go export gopath home moonlightwatch codes...

提示找不到arm linux gcc 命令

時間 2013 04 19 13 58 來源 internet 點選 616 次 老是提示arm linux gcc找不到,但是確實是裝好了,其實是許可權的問題,原帖如下 ub 老是提示arm linux gcc找不到,但是確實是裝好了,其實是許可權的問題,原帖如下 ubuntu沒有root許可權,...