获取上次使用的参数的父级的Bash快捷方式
在我的工作流程中,我通常会:获取上次使用的参数的父级的Bash快捷方式,bash,Bash,在我的工作流程中,我通常会: cat this/very/long/filename.txt cd !$ bash: cd: this/very/long/filename.txt: Not a directory 预计:( 现在我恢复最后一个命令,手动删除文件部分,然后重复现在可以工作的cd。这太多了 如果有bash这样的快捷方式就太好了: cd !§ 这可以给我最后使用的参数的父级。我知道,!§不存在,我只是希望它存在!有什么可以满足这一点吗?等等。历史修饰符来解救我 $ cd !!:$
cat this/very/long/filename.txt
cd !$
bash: cd: this/very/long/filename.txt: Not a directory
预计:(
现在我恢复最后一个命令,手动删除文件部分,然后重复现在可以工作的cd
。这太多了
如果有bash
这样的快捷方式就太好了:
cd !§
这可以给我最后使用的参数的父级。我知道,!§
不存在,我只是希望它存在!有什么可以满足这一点吗?等等。历史修饰符来解救我
$ cd !!:$:h
可以缩写为
$ cd !$:h
此命令接受上一个命令的最后一个参数,并删除尾随路径名
详情如下:
!!
扩展到上一个命令:$
展开到上一个命令的最后一个参数:h
获取标题;即删除文件名(这是上面最后一个参数的尾随部分)!!:$:t
恰恰相反
要深入讨论,请参阅。在本例中,我通常会这样做:(我有emacs密钥绑定)
cd
Alt-dotAlt-b(n次)Ctrl-K
更好:
cd
Alt dotlt Backspace(n次)
注意alt-b或alt-b可以多次按下,直到您对路径感到满意。此较短版本也适用:
cd !$:h
详情:
与表示上一个命令的最后一个参数的!$
同义!!:$
将修饰符与事件词指示符分开:
是删除尾部文件名组件的修饰符h
指的是最后一个命令!!
第一个参数,第二个单词(单词指示符)^
删除尾部路径名组件,保留头部(修改器):h
cat this/very/long/filename.txt
命令之后键入cd!$:h
这个答案,cd!$:h
,在cd!$
之后仍然有效,但是,一旦你犯了这个错误,
您可以使用更短的!:h
,它重复最后一个命令(cd this/very/long/filename.txt
),
但只取最后一句话的开头
我用的是这些鲜为人知的速记:
相当于!word\u指示符
对于非数字单词_指示符(例如,!!:word\u指示符
相当于!$
),以及!!:$
相当于!:修饰符
(例如,!!:修饰符
相当于!:h
)!!:h
代替导航历史,也可以考虑使用<代码> $< /Co>变量来引用前一个命令的最后一个参数(参见代码< >代码> BASH(1)的特殊参数部分。
要进一步剥离文件名组件(“最后一个斜杠之后的所有内容,包括最后一个斜杠”),请使用参数展开(删除匹配的后缀模式):最后一个命令将是
cd this/very/long
,因为/filename.txt
被剥离。与历史扩展不同的是,此命令(cd${{u%/*}
)被添加到历史记录中。谢谢!这不太容易键入(记住),但比我使用的工作流要好。!!$
和!$
似乎等同于!!:$
。区别是什么?当存在两个较短的备选方案时,为什么要使用!!:$
和!$
确实是等效的(cf.)。我更新了我的答案。谢谢!@robertreale在:h
和:$
中的冒号(:
)是什么意思?@Geek冒号只是一个分隔符。请看文档中的相关章节(我在回答中提供了一个链接)。我发现Alt Backspace更有用,因为它是向后删除word。绑定到unix文件名rubout的东西会更好,但默认情况下不绑定。@EtanReisner感谢您指出。我通常使用zsh,我有ctrl-w
来删除word,但在bash中,ctrl-w
用于删除word,not word,我没有找到合适的,所以我alt-b
了几次。试过你的评论,alt-BS
是关键。我可以建议这个问题对超级用户来说是很好的。SE?@konsolebox:(1)“我已经回答了cd!$:h
。”是的,我知道。当我说,“在其他几个人给出的答案的基础上,理想的工作流程是键入cd!$:h
…”,我承认之前的答案,并认为您的答案非常好。您希望我在我的答案中直呼您的名字吗?(2)我对您的答案投了反对票。@konsolebox:(3)“认真地[sic]为什么人们总是回答别人已经回答过的答案。“因为有不止一个可能的答案。例如,我相信我是第一个说!:h
可以在cd!$
之后使用的人。(4)而且,我相信我是第一个解释的人。(某物)
通常可以缩写为!(某物)
或!:(某物)
——您随后复制了这些内容,但没有太多的概括性。“严重的(明显的打字错误)为什么人们总是回答别人已经回答的答案。”…因为有不止一个可能的答案。->我只是指我的具体答案cd!$:h
。我希望你不是说我从你的或其他人那里复制的。
cat this/very/long/filename.txt
cd !!^:h
cd this/very/long
$ cat this/very/long/filename.txt
$ cd ${_%/*}