![寻找一种方法将具有相同参数的多个命令转换为一个行](https://linux22.com/image/40137/%E5%AF%BB%E6%89%BE%E4%B8%80%E7%A7%8D%E6%96%B9%E6%B3%95%E5%B0%86%E5%85%B7%E6%9C%89%E7%9B%B8%E5%90%8C%E5%8F%82%E6%95%B0%E7%9A%84%E5%A4%9A%E4%B8%AA%E5%91%BD%E4%BB%A4%E8%BD%AC%E6%8D%A2%E4%B8%BA%E4%B8%80%E4%B8%AA%E8%A1%8C.png)
我有时最终会做这样的事情:
例子:
从~/blah
$ mkdir ~/test-tmp
$ cp * ~/test-tmp
$ cd ~/test-tmp
连续使用目标目录 3 次。有没有办法将这些变成一行命令?
答案1
你的意思是这样吗?
mkdir ~/test-tmp && cp * ~/test-tmp && cd ~/test-tmp
或者
function mm() {
local dir=$1
if [ ! -z "$dir" ]
then
mkdir ~/${dir} && cp * ~/${dir} && cd ~/${dir}
fi
}
答案2
在 bash 中,您运行的最后一个命令的参数保存为!$
.这记录在man bash
:
! Start a history substitution, except when followed by a blank,
newline, carriage return, = or ( (when the extglob shell option
is enabled using the shopt builtin).
[...]
$ The last argument.
所以,你可以这样做
$ mkdir ~/test-tmp ; cp * !$ ; cd !$
或者,简单地说
$ mkdir ~/test-tmp
$ cp * !$
$ cd !$
答案3
如果您关心的是重新输入~/test-tmp
,您可以执行以下操作来缩短命令并将其合并为一行:
D=~/test-tmp; mkdir $D; cp * $D; cd $D
请注意,如果您的路径包含空格,则必须引用作业和使用变量的地方:
D="~/test tmp"; mkdir "$D" ; cp * "$D"; cd "$D"