非対話型シェルでエイリアスを使いたいのですが、この郵便受けそしてこの郵便受けこれが私の命令です:
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 が検索され、そこに存在する場合はその値が展開され、展開された値が読み取られて実行されるファイルの名前として使用されます。