2番目のエイリアス内でエイリアスを拡張する

2番目のエイリアス内でエイリアスを拡張する

次のことができます。

alias tm=cd /opt/tomcat
alias tmbin=tm/bin

$ tmbin
$pwd
   /opt/tomcat/bin

??

私は私ができることを知っています:

alias tmbin=tm;cd bin

答え1

シンプルな機能を使うのはどうですか?

# may contain bashisms
function tm () { cd "/opt/tomcat/$1"; }
alias tmbin='tm bin' # if that really is necessary

またはもう少し複雑なもの:

# more configurable
function tm () {
    cd /opt/tomcat
    case "$1" in
        "foo")
            # do something funky
            ;;
        "bar")
            # do something more funky
            ;;
    esac
}

答え2

実際には方法がありますが、私が見つけた唯一の方法は少し複雑です。たとえば、私が何をするのか(そのような単純なエイリアスにはお勧めできませんが...)

alias tm="cd /opt/tomcat"
tmp=`alias tm | cut -f2 -d"="`
tmp="${tmp%\'}"
tmp="${tmp#\'}"
alias tmbin="$tmp/bin" 

説明する:

  • まず、cutとaliasを使用して元のコマンドをエイリアスに保存します。
  • その後、文字列は必要ないので、最初と最後の「\」を削除します。
  • その後、元のエイリアスを取得し、その値を使用して新しいエイリアスを作成できます。

私の解決策はまったく良くないようですが、もし良い解決策があれば教えてください。

編集:同じように動作するより短いソリューション

alias tm="cd /opt/tomcat"
tmp=`alias tm | cut -f2 -d"=" | cut -f2 -d"'"`
alias tmbin="$tmp/bin" 

どのエイリアスでも拡張するために使用できることをぜひお伝えしたいと思います。私はテストしたばかりです。エイリアスが長くなるとどう反応するかわかりません。エイリアスが長く、その中に「」がたくさん含まれている場合は、最初の解決策を使用して最初と最後の「」を削除することをお勧めします。あなたに走りました。お役に立てば幸いです。

答え3

ここに良い答えがありますスタックオーバーフローの質問

たとえば、「-o」を追加して「ls」のエイリアスを拡張するには、次のようにします。

eval "$(alias -p|grep '^alias ls='|sed "s/'$/ -o'/")"

関連情報