向现有终端命令添加标志

Par*_*rto 2 command-line

从这个问题:ls 是否总是列出 rm 将删除的文件?@fkraiem 评论说:

我有点惊讶 rm 没有 --dry-run 标志......

这让我想起了一个场景,我曾经使用seq命令生成 1 - 100 的数字序列。问题是列表有一个前缀Item

seq 100
Run Code Online (Sandbox Code Playgroud)

生成:

1
2
3
...
100
Run Code Online (Sandbox Code Playgroud)

而我想要:

Item 1
Item 2
Item 3
...
Item 100
Run Code Online (Sandbox Code Playgroud)

以 seq 命令为例,无论如何我可以添加一个--prefix=[PREFIX]标志来自动向生成的序列列表添加前缀吗?

我不是在谈论 bash 别名

ste*_*ver 7

一般来说除了修改命令的代码(在编译的可执行文件的情况下还需要重新编译)之外,您还需要编写一个包装函数 - 作为 shell 函数或位于PATH. 它需要:

  • 解析命令行参数
  • 拦截您的附加选项(以及任何特定于选项的参数)
  • 执行新动作
  • 否则将剩余的参数传递给原始命令

但是,您seq应该已经有一个选项来指定数字格式,这可能 (ab) 用于获取您想要的列表类型

   -f, --format=FORMAT
          use printf style floating-point FORMAT
Run Code Online (Sandbox Code Playgroud)

前任。

$ seq -f 'Item %.0f' 1 10
Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Run Code Online (Sandbox Code Playgroud)

更一般地,您可以使用printfeg printf 'Item %d\n' $(seq 1 100)or (使用 bash 的内置大括号扩展)printf 'Item %d\n' {1..100}


顺便说一句,rm确实有一种空运行的标志,-i

-i     prompt before every removal
Run Code Online (Sandbox Code Playgroud)

或(不太便携)

-I     prompt once before removing  more  than  three  files,  or  when
      removing recursively; less intrusive than -i, while still giving
      protection against most mistakes
Run Code Online (Sandbox Code Playgroud)