寻找一种方法将具有相同参数的多个命令转换为一个行

寻找一种方法将具有相同参数的多个命令转换为一个行

我有时最终会做这样的事情:

例子:

~/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"

相关内容