在我的工作流程中,我经常这样做:
cat this/very/long/filename.txt
cd !$
bash: cd: this/very/long/filename.txt: Not a directory
这是预期的:(
现在我恢复最后一个命令,手动删除文件部分,然后重复cd
,现在可以正常工作。那是太多输入!
如果有bash
快捷方式,那就太好了:
cd !§
这可以给我最后一个参数的父级。我知道!§
不存在,我只是希望它能做到!有什么能满足这个要求吗?
答案 0 :(得分:40)
Etvoilà。历史修饰语拯救了!
$ cd !!:$:h
可以缩写为
$ cd !$:h
此命令采用上一个命令的最后一个参数 ,删除尾随路径名。
更多细节:
!!
扩展为上一个命令:$
扩展为上一个命令的最后一个参数:h
获取标题;也就是说,删除文件名(这是上一个参数的尾部)顺便说一下,
!!:$:t
恰恰相反。
如需深入讨论,请参阅the Bash documentation。
答案 1 :(得分:16)
这个较短的版本也可以使用:
cd !$:h
详细说明:
!$
与!!:$
同义,后者显示上一个命令的最后一个参数。:
将修饰符与事件字指示符分开。h
是删除尾随文件名组件的修饰符。答案 2 :(得分:7)
基于其他几个人提出的答案,
理想的工作流程是在cd !$:h
命令后键入cat this/very/long/filename.txt
。
这个答案cd !$:h
在cd !$
之后仍然可以使用,但是,一旦你犯了这个错误,
你可以使用更短的!:h
,它重复最后一个命令(cd this/very/long/filename.txt
),
但只拿最后一句话。
我正在使用这些鲜为人知的短片:
!word_designator
相当于!!:word_designator
对于非数字 word_designator (例如,!$
相当于!!:$
)和!:modifier
相当于!!:modifier
(例如,!:h
相当于!!:h
)。答案 3 :(得分:6)
在这种情况下,我通常会这样做:(我有emacs键绑定)
cd
Alt-dot Alt-b (n次) Ctrl-K
更好:
cd
Alt-dot ALT-Backspace (n次)
注意 alt-b 或 ALT-Bs 可以多次按下,直到您对路径感到满意为止。
答案 4 :(得分:5)
cat this/very/long/filename.txt
cd !!^:h
cd this/very/long
!!
指的是最后一个命令^
第一个参数,第二个词(单词指示符):h
删除尾随路径名组件,留下头部(修改器)。答案 5 :(得分:2)
您还可以考虑使用$_
变量来引用上一个命令的最后一个参数(参见特殊参数下的_
bash(1)
的部分。
要进一步去除文件名组件(“后面的所有内容,包括最后一个斜杠”),请使用参数扩展(删除匹配的后缀模式):
$ cat this/very/long/filename.txt
$ cd ${_%/*}
自cd this/very/long
被剥离后,最后一个命令将为/filename.txt
。与历史记录扩展的不同之处在于此命令(cd ${_%/*}
)已添加到历史记录中。