私はコマンドを使用して2つの定義を切り替えたいと思います(コマンドラインでalias
RustとCrystalコンパイラを使用しようとしています)。私の中には次のものがあります。cargo
crystal
~/.bash_profile
エイリアスc =クリスタル エイリアス商品 = "unalias c; エイリアス c = 商品" エイリアスクリスタル = "unalias c; エイリアス c = クリスタル"
しかし、私が次のようなことを実行しようとすると
> cマクロ.rs
macOS端末で私は得る
bash:エイリアス:マクロ.rs:見つかりません
ここで何が間違っている可能性がありますか?
答え1
ここで何が起こっているのか見てみましょう。
$ set -x
$ c file
+ unalias c
+ alias c=crystal file
bash: alias: file: not found
$ set +x
したがって、(中間拡張を介して)c file
に拡張されます。unalias c; alias c=crystal file
crystal file
alias c=crystal file
無意味。私の考えでは、あなたが望むものはcrystal file
処刑されると思います。
意味を切り替えるエイリアスの名前を変更することもできますc
。
alias usecrystal="alias c=crystal"
alias usecargo="alias c=cargo"
または、エイリアス拡張からコマンドを保護することもできます。
alias c="\crystal"
alias crystal="alias c=\crystal"
alias cargo="alias c=\cargo"
または、以下を使用してくださいcommand
(IMHOが良く見えます)。
alias c="command crystal"
alias crystal='alias c="command crystal"'
alias cargo='alias c="command cargo"'
このcommand
コマンドは、エイリアスの拡張も防止します。