gpt4 book ai didi

linux - for循环从文件运行命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:50 25 4
gpt4 key购买 nike

我在文件中有存储命令,我想捕获它们的输出,但这里出了什么问题?

我想捕获每个命令的输出并存储在相关文件中。

仅举个例子,我有 100 条我想运行并捕获 optput 的命令,但我只是在下面的代码中停留在我的演示测试中。

我的 foo.txt

/bin/ls
/bin/cat /etc/redhat-release

我的循环

[spatel@linux ~]$ IFS=$'\n'
[spatel@linux ~]$ for qw in `cat foo.txt`; do echo $qw; done
backup bar final.sh foo.txt input.txt
-bash: /bin/cat /etc/redhat-release: No such file or directory

为什么/bin/ls运行但是/bin/cat/etc/redhat-release不运行

更新:

[spatel@linux ~]$ /bin/cat /etc/redhat-release
CentOS release 6.6 (Final)

最佳答案

如图所示,lscat 都没有实际执行:

$ for qw in `cat foo.txt`; do echo $qw; done
/bin/ls
/bin/cat /etc/redhat-release

为了获得您显示的输出,我怀疑您确实运行了此命令;

$ for qw in `cat foo.txt`; do $qw; done
foo.txt
bash: /bin/cat /etc/redhat-release: No such file or directory

在这种情况下,ls 被执行但 /bin/cat/etc/redhat-release 没有被执行,因为没有名称为完整字符串的命令 /bin/cat/etc/redhat-release。 (shell 在这里不进行分词。)

在一个更简单的例子中看到这一点:

$ ls *.txt
foo.txt
$ a="ls *.txt"; $a
bash: ls *.txt: command not found

执行所有命令并将输出捕获到文件

要执行 foo.txt 中的所有命令,请运行:

$ bash foo.txt
foo.txt
CentOS release 6.6 (Final)

要运行所有命令并将它们的输出捕获到文件 output.log,然后运行:

bash foo.txt >output.log

运行所有命令并在屏幕上显示它们的输出,同时将输出捕获到文件中:

$ bash foo.txt | tee output.log
foo.txt
CentOS release 6.6 (Final)

将每个命令的输出捕获到不同的文件

首先,在 foo.txt 上运行 awk 以创建 foo.sh:

$ awk '{sub(/$/, (" >output" ++count))} 1' foo.txt >foo.sh

这是 foo.sh 的样子:

$ cat foo.sh
/bin/ls >output1
/bin/cat /etc/redhat-release >output2

如您所见,文件中的每个命令现在都将其标准输出发送到编号文件。如果您也想捕获 stderr,那只是一个小改动。

现在,运行 foo.sh:

$ bash foo.sh
$ cat output1
foo.sh
foo.txt
output1

关于linux - for循环从文件运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30129848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com