Bash 可以让shell别名计算历史替换命令吗?
我正在尝试为cd编写别名!!:1,它接受上一个命令的第二个字,并更改为该名称的目录。例如,如果我键入Bash 可以让shell别名计算历史替换命令吗?,bash,history,eval,alias,zsh,Bash,History,Eval,Alias,Zsh,我正在尝试为cd编写别名!!:1,它接受上一个命令的第二个字,并更改为该名称的目录。例如,如果我键入 rails new_project cd !!:1 第二行将cd放入“new_project”目录 自从!!:1很难输入(虽然它很短,但需要在键盘的另一侧输入三个移位键,然后输入两个移位键的未移位版本),我只想输入以下内容 cd- 但是自从1是在命令行上计算的,我(显然)不能这样做 alias cd-=!!:1 或者我会保存一个包含“new_project”硬编码的别名。所
rails new_project
cd !!:1
第二行将cd放入“new_project”目录
自从!!:1很难输入(虽然它很短,但需要在键盘的另一侧输入三个移位键,然后输入两个移位键的未移位版本),我只想输入以下内容
cd-
但是自从1是在命令行上计算的,我(显然)不能这样做
alias cd-=!!:1
或者我会保存一个包含“new_project”硬编码的别名。所以我试过了
alias cd-='!!:1'
这样做的问题是!!:1从未计算过,我收到一条消息,没有名为的目录!!:1存在。如果在发出alias命令时计算历史替换,而不是在定义别名时计算,那么如何生成别名
(我在bash和zsh中都试过,结果都一样。)对于bash:
alias cd-='cd $(history -p !!:1)'
完成相同任务的另一种方法: 关于最后一个论点:
cd
Alt-
或
cd
Esc
对于第一个论点:
cd
Alt-Ctrl-y
或
cd
Esc Ctrl-y
对于zsh:
alias cd-='cd ${${(z)$(fc -l -1)}[3]}'
工作原理:
$(fc-l-1)
进行评估fc-l{start}[{end}]
表示«列出从{start}到{end}或最后一个(如果{end}不存在)的历史命令»${(z)…}
必须像shell一样将..
拆分为一个数组(请参见man zshexpn
中的«参数扩展标志»),但实际上它是在空白处拆分的。也许这只是我的错误${…[3]}
从数组中获取第三个值。第一个值是命令的数字,第二个值是命令,第三个值和以后的值是参数非常好,谢谢!不幸的是,它在zsh中不起作用。人类历史和历史——帮助是无用的,我还没能通过谷歌搜索找到任何东西。。。有什么想法吗?我还以为有一种方法可以用反引号来实现呢。e、 g.
alias cd-='cd`!!:1`
。哪一个更简洁(如果我能让它工作的话!)@dgreensive:Backquotes和$()运行命令;因此必须使用“历史”内置项。我只是做了一些类似的事情,结果是fc…|剪切-d'-f4-
,删除命令的前导编号。在Unix上可能相同: