linux - 对于每一行输入,将该行与输出一起发出,将其传递给命令

标签 linux bash

我有一个输入文件,每个值都有一行,如下所示:

100
200

我打算将每个输入值传递给任意命令(此处为 abc),并生成一个输出文件,其中包含输入和相关输出。

假设我的命令 abc100 转换为 tada 并将 200 转换为 jjhu(实际生产版本会做一些不同的事情),我的预期输出是:

100 tada
200 jjhu

目前,我正在尝试使用以下命令:

cat jobs.txt | xargs -n 1 -I {} sh -c "echo {}; abc {}"

...但它的输出是:

100
tada
200
jjhu

如何纠正这种情况,将输出与输入放在同一行?

最佳答案

根本不要为这个任务使用xargs-n 1(为每行输入运行一个新的单独的 shell 进程)效率低下,并使您面临安全漏洞(考虑您的 100 是否 $(rm -rf $HOME) 进行一些转义以使其充当单个单词)。

以下可以在单个 shell 实例中运行,假设您的输入文件每一行都有一个值:

while IFS= read -r line; do
  printf '%s %s\n' "$line" "$(abc "$line")"
done <jobs.txt

关于linux - 对于每一行输入,将该行与输出一起发出,将其传递给命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42685157/

相关文章:

java - 如何在 IceWM 中启动时运行 java GUI?

arrays - Bash 数组保存

linux - Debian 镜像持续增长

linux - 如何在 UNIX bash 中的 bash 字符串中插入双引号

python - Emacs启动py-shell时如何加载shell环境变量?

Linux flock,如何锁定 "just"文件?

linux - 混合hadoop集群

linux - 在 Linux bash 上自动将文件复制到 USB

bash - 使用 bash 从文件中选择单词

reactjs - 当我在 Ubuntu 中输入任何东西时,它会返回/usr/bin/env : ‘bash\r’ : No such file or directory