使用Bash快捷方式获取上次使用的参数的父级

dan*_*ast 26 bash

在我的工作流程中,我经常做:

cat this/very/long/filename.txt
cd !$
bash: cd: this/very/long/filename.txt: Not a directory
Run Code Online (Sandbox Code Playgroud)

这是预期的:(

现在我恢复最后一个命令,手动删除文件部分,然后重复cd,现在可以正常工作.这是太多的打字!

如果有一条bash快捷方式,那将是非常好的:

cd !§
Run Code Online (Sandbox Code Playgroud)

哪个可以给我最后一个参数的父级.我知道不存在,我只是希望它能做到!有什么能满足这个吗?

Rob*_*ale 39

Etvoilà. 历史修饰语来救援!

$ cd !!:$:h
Run Code Online (Sandbox Code Playgroud)

可以缩写为

$ cd !$:h
Run Code Online (Sandbox Code Playgroud)

这个命令会将最后一个参数上一个命令,并删除尾部的路径名.

更多细节:

  1. !! 扩展到上一个命令
  2. :$ 扩展到上一个命令的最后一个参数
  3. :h采取标题 ; 也就是说,删除文件名(这是上一个参数的尾部)

作为旁白,

!!:$:t
Run Code Online (Sandbox Code Playgroud)

完全相反.

有关深入讨论,请参阅Bash文档.


kon*_*box 15

这个较短的版本也可以工作:

cd !$:h
Run Code Online (Sandbox Code Playgroud)

细节:

  • !$是同义词,!!:$它表示上一个命令的最后一个参数.
  • : 将修饰符与事件字指示符分开.
  • h 是删除尾随文件名组件的修饰符.


Sco*_*ott 7

基于其他几个人提出的答案,理想的工作流程是cd !$:hcat 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


Ken*_*ent 6

在这种情况下,我通常会这样做:(我有emacs键绑定)

cd Alt-dotAlt-b(n次)Ctrl-K

更好:

cdAlt-dotALT-Backspace(n次)

注意alt-bALT-Bs可以多次按下,直到你对路径感到满意为止.


Зел*_*ный 5

cat this/very/long/filename.txt
cd !!^:h
cd this/very/long
Run Code Online (Sandbox Code Playgroud)
  • !! 指的是最后一个命令
  • ^ 第一个参数,第二个词(单词指示符)
  • :h 删除尾随路径名组件,留下头部(修改器).