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

时间:2014-07-30 13:48:10

标签: bash

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

cat this/very/long/filename.txt
cd !$
bash: cd: this/very/long/filename.txt: Not a directory

这是预期的:(

现在我恢复最后一个命令,手动删除文件部分,然后重复cd,现在可以正常工作。那是太多输入

如果有bash快捷方式,那就太好了:

cd !§

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

6 个答案:

答案 0 :(得分:40)

Etvoilà。历史修饰语拯救了!

$ cd !!:$:h

可以缩写为

$ cd !$:h

此命令采用上一个命令的最后一个参数 删除尾随路径名

更多细节:

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

    !!:$:t
    

    恰恰相反。

    如需深入讨论,请参阅the Bash documentation

答案 1 :(得分:16)

这个较短的版本也可以使用:

cd !$:h

详细说明:

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

答案 2 :(得分:7)

基于其他几个人提出的答案, 理想的工作流程是在cd !$:h命令后键入cat this/very/long/filename.txt。 这个答案cd !$:hcd !$之后仍然可以使用,但是,一旦你犯了这个错误, 你可以使用更短的!: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)

您还可以考虑使用$_变量来引用上一个命令的最后一个参数(参见特殊参数下的_

,而不是浏览历史记录。 em> bash(1)的部分。

要进一步去除文件名组件(“后面的所有内容,包括最后一个斜杠”),请使用参数扩展(删除匹配的后缀模式):

$ cat this/very/long/filename.txt
$ cd ${_%/*}

cd this/very/long被剥离后,最后一个命令将为/filename.txt。与历史记录扩展的不同之处在于此命令(cd ${_%/*})已添加到历史记录中。