在第二个别名中扩展一个别名

在第二个别名中扩展一个别名

可以这样做:

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'/")"

相关内容