可以这样做:
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'/")"