首頁 > 運維 > linux運維 > linux用戶source .bashrc或.profile找不到檔案怎麼解決

linux用戶source .bashrc或.profile找不到檔案怎麼解決

PHPz
發布: 2023-05-13 21:37:19
轉載
5170 人瀏覽過

    linux用戶source .bashrc或.profile找不到檔案

    之前在debian遇到這種情況,新增加的用戶,每次登入的路徑都顯示sh-42$必須su - 使用者名稱才能恢復正常,且使用者目錄下的.bashrc和其他的設定檔都沒有辦法source,導致一系列問題。

    如果是這種情況,極有可能是linux的預設啟動shell不正確,su切換成超級用戶,vi /etc/passwd查看用戶對應的啟動shell,對比其他正常的用戶的啟動shell ,如果不一樣則修改成相同即可。 。

    例如其他正常使用者的shell為/bin/bash ,異常使用者對應的shell是/bin/sh,則將其改為/bin/bash。

    Linux .bashrc .bash_profile 和.profile之間的區別

    1 概述

    bash shell使用一些啟動檔案去設定環境變量,這些啟動檔案為shell本身和系統使用者確定某些bash shell配置,在本文中,我們將了解.bashrc .bash-profile 和.profile之間的差異。

    2 互動式和非互動式shell

    • Bash在互動式shell中提供了兩個模式選項,登入和非登入(login and non-login) 。

    • 當我們使用ssh登入系統時,我們得到一個互動式登入的shell (interactive login shell),這個shell在被呼叫時會讀取啟動檔。

    • 然而,當我們在一個已經登入的shell上呼叫一個新的shell時,我們得到的是一個互動的、非登入的shell。這個shell只執行.bashrc檔案

    當shell不需要任何人類幹預即可執行指令時,我們稱之為非互動式shell (non-interactive shell)。例如,當腳本產生子shell來執行命令時,子shell是非互動式shell,子shell不會執行任何啟動文件,它從創建它的shell中繼承了環境變數。

    3 bash啟動檔案

    啟動檔案包含shell啟動時需要執行的指令。因此,shell會自動執行這些啟動檔案中的指令來設定shell。這個過程發生在顯示命令提示字元之前。

    3.1 .bash_profile 的意義

    .bash_profile檔案包含用於設定環境變數的命令,因此shell將繼承這些變數。

    在互動式登入shell中,bash先找 /etc/profile 檔案。如果找到,bash將在目前shell中讀取並執行它。結果是 /etc/profile為所有使用者設定環境配置

    類似地,bash接著檢查主目錄(cd ~ 進入的目錄為主目錄)中是否存在 .bash_profile。如果存在,則bash在目前shell中執行 .bash_profile,Bash然後停止尋找其他文件,如 .bash_login 和 .profile。

    如果bash沒有找到 .bash_profile,那麼它將依照順序尋找 .bash_login 和 .profile,並且只執行第一個可讀的檔案。

    讓我們研究一個範例 .bash_profile檔。這裡我們重新設定並導出PATH變數

    echo "Bash_profile execution starts.."  
    PATH=$PATH:$HOME/bin; 
    export PATH; 
    echo "Bash_profile execution stops.."
    登入後複製

    在互動式登入shell的命令提示字元之前,我們將看到下面的輸出

    Bash_profile execution starts.. 
    Bash_profile execution stops.. 
    [example@example ~]$
    登入後複製

    3.2 .bashrc 的意義

    .bashrc包含特定於bash shell的指令。每個互動式非登入shell首先讀取 .bashrc,通常,.bashrc是添加別名和bash相關功能的最佳場所。

    bash shell在主目錄中尋找 .bashrc文件,並使用source在目前shell中執行它。

    讓我們透過範例認識.bashrc檔案

    echo "Bashrc execution starts.." 
    alias elui='top -c -u $USER' 
    alias ll='ls -lrt' 
    echo "Bashrc execution stops.."
    登入後複製

    在互動式非登入shell的命令提示字元之前,我們將看到下面的輸出

    [example@example ~]$ bash
    Bashrc execution starts.. 
    Bashrc execution stops.. 
    [example@example ~]$
    登入後複製

    3.2 .profile 的意義

    在互動式shell登入過程中,如果在主目錄中不存在.bash_profile,則bash尋找.bash_login,如果發現**.bash_login** 則bash執行它。如果 .bash_login 不存在主目錄中,則bash尋找 .profile 並執行它。

    .profile 可以保持與 .bash_profile 或 .bash_login 的設定。它控制著出現的提示,鍵盤聲音,要打開的 shell 以及覆蓋 /etc/profile檔案中設定的變數的單一設定檔設定。

    4 區別

    每次互動登入時,bash shell都會執行 .bash_profile。如果在主目錄中找不到 .bash_profile,bash將執行從 .bash_login 和 .profile 中找到的第一個可讀檔案。但是,在每次互動式非登入shell啟動時,bash都會 .bashrc。

    通常情況下,環境變數會被放入 .bash_profile。由於互動式登入shell是第一個shell,因此環境設定所需的所有預設設定都被放入**.bash_profile**。因此,它們只設定一次而且在所有子shell中繼承。

    同樣地,別名和函數也會被放入.bashrc 確保每次從現有環境中啟動shell時都加載這些

    #然而,為了避免登入和非登入互動shell設置的差異。 .bash_profile 呼叫 .bashrc。因此,我們將看到下面的程式碼片段被插入**.bash_profile**,以便在每個互動式登入shell上 .bashrc 也在同樣shell執行:

    if [ -f ~/.bashrc ];
    then 
        .  ~/.bashrc; 
    fi 
    PATH=$PATH:$HOME/bin export PATH
    登入後複製

    注意:

    总而言之,在使用环境之前,shell需要其启动文件以配置shell环境。

    在本文中,我们检查了各种shell模式。然后,我们了解了各种bash启动文件的重要性。最后,我们检查了这些启动文件之间的差异。

    以上是linux用戶source .bashrc或.profile找不到檔案怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板