エイリアス定義間の切り替え

エイリアス定義間の切り替え

私はコマンドを使用して2つの定義を切り替えたいと思います(コマンドラインでaliasRustとCrystalコンパイラを使用しようとしています)。私の中には次のものがあります。cargocrystal~/.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 filecrystal 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コマンドは、エイリアスの拡張も防止します。

おすすめ記事