在 Bash 中,如何使用单词替换重复一系列命令

在 Bash 中,如何使用单词替换重复一系列命令

我正在寻找的是可以执行一系列如下命令的东西:

# cat file1 >> concated_file
# cat file2 >> concated_file
# cat file3 >> concated_file
# cat file4 >> concated_file

但不需要我再重新输入整个命令 3 次。也许只需用以下语法替换上一个命令中的参数即可:

# cat file1 >> concated_file
# s/file1/file2
# s/file2/file3
# s/file3/file4

我知道如果最后一个参数相同你可以这样做:

# cp -p test1.txt test2.txt
# chmod 777 $_
# chown nimmylebby: $_

您还可以使用 Bash 循环,如下所示:

# for f in 'file1' 'file2'; 
> do 
> chmod 750 $f;
> done

然而,上述两个例子不是我正在寻找什么。我只想执行一系列只因一个参数而不同的命令没有使用 for 循环。这可能吗?可能不行,但希望可以 ;-)。

答案1

  • Up,根据需要编辑命令,按Enter

  • 与前面相同,但为了便于编辑,请将更改的单词安排在命令的最后,例如cat >> concated_file file1。对于您的示例命令,这很简单,但并非在所有情况下都是如此。

  • 定义一个以变量部分作为参数的函数:f () { cat "$1" >> concated_file; }。然后多次调用该函数:f file1f file2,...

  • 使用历史扩展. 您可以在这里做^file1^file2

答案2

也许你需要的是一个功能:

function mycat() { cat $1 >> concated_file; }
mycat file1
mycat file2
mycat file3
mycat file4

相关内容