我有大约 6 个程序想要一个接一个地运行。它们都位于不同的目录中,并具有各自的数据。我需要有关脚本的帮助,我可以使用该脚本以特定顺序运行每个程序。
这是因为上一次运行的输出是下一次运行的输入。
答案1
有两种方法可以将程序“链接”在一起。如果您尝试将它们链接在一起,以便第一个的输出传递到第二个,那么您需要使用所谓的管道。另一种方法只是简单地运行一个又一个程序。
管道示例
在这里,我们获取第一个命令的输出,并将其通过管道 ( |
) 传递到第二个命令。
$ echo "output from 1" | grep 1
output from 1
命令的输出显示在屏幕上grep
。
系列命令示例
在这里,我们先运行一个命令,然后运行另一个命令。
例子
#!/bin/bash
echo 1
echo 2
将以上内容放入名为 的文件中mycmds.bash
,使其可执行,然后运行它:
$ chmod +x mycmds.bash
$ ./mycmds.bash
1
2
您还可以使用子壳如果您愿意,可以在提示符下运行一系列命令,并将其输出捕获到文件中。这将以与上面的 shell 脚本方法相同的方式运行命令。
例子
只是运行命令
$ (echo 1; echo 2; echo 3)
1
2
3
捕获他们的输出
$ (echo 1; echo 2; echo 3) | grep 3
3
将其输出捕获到文件中
$ (echo 1; echo 2; echo 3) | tee mycmds.log
1
2
3
$ cat mycmds.log
1
2
3
答案2
您在第一行编写第一个程序。
您在第二行编写第二个程序。
你重复一遍。
答案3
你的问题很难理解。您在寻找吗管道?
如果你写
program1 --option1 | program2 --option2
然后命令的输出program1 --option1
将作为命令的输入program2 --option2
。
您可以通过这种方式链接两个以上的程序。如果该行太长,您可以在每个管道符号后添加换行符。
pre-treatment file1.input file2.input file3.input |
some-processing --option=value --other-option |
more-processing |
analyze this --and that |
grep 'interesting stuff'
看连接 STDOUT 和 STDIN 是什么意思?管道隐喻的直观解释。