如何使用相同的参数执行多个命令?

如何使用相同的参数执行多个命令?

我想知道是否可以在 Ubuntu 终端中进行如下连锁操作:

action 1 on objectA . then action 2 on objectA 

而不必再重复 objectA 的名称。

例子:

touch file.js && openEditor "$1" 

或类似的东西。

答案1

使用 bash历史扩展!#:n,你可以使用例如引用当前命令行的第 n 个单词

$ touch foobar && ls -l !#:1
touch foobar && ls -l foobar
-rw-rw---- 1 steeldriver steeldriver 0 Jun 20 14:54 foobar

$ touch foo bar && ls -l !#:2
touch foo bar && ls -l bar
-rw-rw-r-- 1 steeldriver steeldriver 12 Jun 20 14:58 bar

答案2

对于常见用例,有一个方便的快捷方式。在您的示例中,您正在执行以下操作:

$ touch file.js
$ openEditor <alt>+<.>

在第二个命令中,诀窍是写入openEditor(后面有一个空格)后跟Alt+ .。这将插入最后的论点最后的命令,即。(如果由于某种原因file.js它不能使用,也应该可以工作。)AltEsc

由于“对象”通常确实是上一个命令的最后一个参数,因此可以经常使用它。它很容易记住,并且可以快速融入您直观使用的 shell 快捷方式中。

你可以用它做很多事情,这里有一篇关于这些可能性的深入文章:https://stackoverflow.com/questions/4009412/how-to-use-arguments-from-previous-command

作为奖励,这不仅适用于 bash,还适用于所有使用 libreadline 处理命令行输入的程序。

答案3

就默认的交互式 shellbash和脚本 shell而言dash,您可以使用$_它来调用最后一个命令的最后一个参数

$ echo "Hello World"; echo same "$_"
Hello World
same Hello World

韓軟體并且 tcsh 有历史参考,特别是对于命令的最后一个词,你可以使用!$, 以及对于单个参数 - !:<index>

~% echo foo bar
foo bar
~% echo !$
echo bar
bar

% echo bar baz
bar baz
% echo !:1
echo bar
bar

一般来说,最好将任何东西分配objectA给变量,然后在多个命令、循环等中使用它。或者,也可以选择函数:

$ foo(){ echo "$@"; stat --print="%F\n" "$@";}
$ foo testdir
testdir
directory

答案4

在编写单行代码时,我有时会将重复的内容分配给我在命令中多次使用的 shell 变量。我可以调用并编辑它以使用不同的参数,使用向上箭头、control+a、control+向右箭头使光标靠近t=

t=testloop; asm-link -d "$t.asm" && perf stat -r2 ./"$t"

请注意,这使得添加扩展名或名称变体变得容易。

;还要注意,在变量赋值之后我需要一个,因为var=value cmd只是将其设置为该命令的环境变量,并且不会影响 shell 上下文。

相关内容