非対話型シェルではエイリアスを拡張できません。

非対話型シェルではエイリアスを拡張できません。

この記事を読んだ後、非対話型シェルでいくつかのエイリアスを使用したいと思います。この投稿そしてこの投稿。これは私のコマンドです:

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対話型シェルに対してのみ実行されます。

これが私がすることです。.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がシェルスクリプトを実行したときにこのパラメータが設定されている場合、その値は〜/ .bashrcのようにシェルを初期化したコマンドを含むファイルの名前として解釈されます。

そして:

たとえば、bashが非対話型で始まる場合は、シェルスクリプトを実行するために環境でBASH_ENV変数を探し、その値がある場合は展開し、拡張値をファイル名として読み込み実行します。

関連情報