我想知道是否可以在 Ubuntu 终端中进行连锁操作,例如:
action 1 on objectA . then action 2 on objectA
无需再重复 objectA 的名称。
例子:
touch file.js && openEditor "$1"
或类似的东西。
我想知道是否可以在 Ubuntu 终端中进行连锁操作,例如:
action 1 on objectA . then action 2 on objectA
无需再重复 objectA 的名称。
例子:
touch file.js && openEditor "$1"
或类似的东西。
使用 bash History Expansion
!#:n
,您可以使用例如引用当前命令行的第 n 个单词常见用例有一个方便的快捷方式。在您的示例中,您正在执行以下操作:
在第二个命令中,诀窍是写
openEditor
(后面有一个空格)后跟Alt+ .。这将插入最后一个命令的最后一个参数,即file.js
. Alt(如果由于某种原因它不能工作,Esc也应该工作。)由于“对象”通常确实是前一个命令的最后一个参数,因此可以经常使用它。它很容易记住,并且可以快速集成到您直观使用的 shell 快捷方式中。
你可以用这个做很多事情,这里有一篇关于可能性的深入文章:https ://stackoverflow.com/questions/4009412/how-to-use-arguments-from-previous-command 。
作为奖励,这不仅适用于 bash,而且适用于所有使用 libreadline 处理命令行输入的程序。
就默认的交互式 shell
bash
和脚本 shelldash
而言,您可以使用$_
调用最后一个命令的最后一个参数。csh和 tcsh 具有历史参考,特别是对于命令的最后一个单词,您可以使用
!$
, 以及对于单个参数 -!:<index>
:通常,最好将任何内容分配给
objectA
变量,并在多个命令、循环等中使用它。或者,可以选择函数:我建议反对Steeldriver 的回答中给出的历史方法。这依赖于总是脆弱的全局状态。
更好的是使用适当的变量预先循环所有需要的命令:
一般来说,有点问题的是 Bash 在出现故障时不会中止,即这实际上表现得像
touch foo.txt; gedit foo.txt
而不是链接 with&&
。因此,为了安全起见,您可以添加break
:在编写单行代码时,我有时会将重复的内容分配给我在命令中多次使用的 shell 变量。我可以回忆和编辑它以使用带有向上箭头、control+a、control+right-arrow 的不同 arg 来使光标靠近
t=
.请注意,这使得添加扩展名或名称变体变得容易。
另请注意,我需要
;
在变量赋值之后添加一个,因为var=value cmd
只需将其设置为该命令的环境变量,并且不会影响 shell 上下文。