非対話型シェルでエイリアスを展開できませんでした

非対話型シェルでエイリアスを展開できませんでした

非対話型シェルでエイリアスを使いたいのですが、この郵便受けそしてこの郵便受けこれが私の命令です:

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" "$@"; }

ls(私はあなたのとエイリアスの移植を拒否しましたecho。それらは良いことよりも悪いことの方が多いようです。)

答え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 が検索され、そこに存在する場合はその値が展開され、展開された値が読み取られて実行されるファイルの名前として使用されます。

関連情報