無法在非互動式 shell 中擴展別名

無法在非互動式 shell 中擴展別名

閱讀後,我想在非互動式 shell 中使用一些別名這個帖子這個帖子。這是我的命令:

bash -O expand_aliases -c 'source ~/.bashrc; <some alias>'

這是我的.bashrc

 # Bash History
 HISTSIZE=1000
 HISTFILESIZE=2000
 # Colorful Prompt
 PS1='\[\033[01;34m\]\w\n\[\033[01;32m\]\u@\h\[\033[00m\] > '
 # Aliases
 alias ls='ls --color=auto -A -I NTUSER.\* -I ntuser.\*'
 alias echo='echo -e'
 alias docker='"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'
 alias docker-compose='"/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe"'

echo輸入了一些東西.bashrc並且確信它source ~/.bashrc有效,但別名只是拒絕擴展。我也嘗試過:

bash -O expand_aliases -c shopt

以確保該選項expand_aliases設定為開啟。

我該如何解決?

答案1

非常簡單的解決方法是使用函數而不是別名。在很多情況下,函數優於別名,但據我所知,在哪些情況下函數優於別名。

 docker () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe" "$@"; }
 docker-compose () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe" "$@"; }

(我拒絕移植你的lsecho別名 - 它們似乎弊大於利。)

答案2

.bashrc僅針對互動式 shell 執行。

這就是我所做的。.bash_env在您的主目錄中建立一個新檔案。將所有別名放在那裡,例如:

shopt -s expand_aliases
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'

然後在您的中引用它.bash_profile(當然,在那裡放置一個真實的路徑名):

 export BASH_ENV='/home/username/.bash_env'

(登出並登入即可啟動)


BASH_ENV在線上說明頁:

如果在 bash 執行 shell 腳本時設定此參數,則其值將被解釋為包含初始化 shell 的命令的檔案名,如 ~/.bashrc 中。

和:

當 bash 以非互動方式啟動時,要執行 shell 腳本,例如,它會在環境中尋找變數 BASH_ENV,如果出現則擴充其值,並使用擴充值作為要讀取和執行的檔案名稱。

相關內容