![从另一个脚本运行 bash 脚本并重定向其输出](https://linux22.com/image/1047584/%E4%BB%8E%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC%E8%BF%90%E8%A1%8C%20bash%20%E8%84%9A%E6%9C%AC%E5%B9%B6%E9%87%8D%E5%AE%9A%E5%90%91%E5%85%B6%E8%BE%93%E5%87%BA.png)
大家好,我要做一个程序..我会非常简洁地解释它...我已经做了什么以及我必须做什么......
简单地说,我必须在 Bash 中做一个“模拟器”,运行学生的练习并检查它们是否正确……对于每个练习,我必须计算一个分数并判断学生是否通过了考试……
我几乎做完了所有事情...我想我只差几行代码就可以写出来了...但我认为它们也是最重要的... :(
我的脚本是 TEST.SH,我必须运行学生的练习..练习是一个脚本 ELABORATO.SH...现在,我可以有一些场景:
- ELABORATO.SH 等待输入一些值作为参数;
- ELABORATO.SH 等待来自标准输入、键盘的输入;
- ELABORATO.SH 将输出写入文件/fifo/等中;
首先,解决起来非常简单...实际上,我从 TEST.SH 调用
ELABORATO.SH
以下命令:. ELABORATO.SH param1 param2 param3;
第二和第三个对我来说更复杂。
我必须从文件中读取一个字符串(没问题)并将该字符串传递给它,
ELABORATO.SH
因为该字符串来自 stdin。我必须创建一个包含
ELABORATO.SH
...输出的文件,例如,如果ELABORATO.SH
生成一个文件(我不知道输出文件的名称),我还必须在另一个目录中生成一个文件...我该怎么办?
答案1
这听起来很像家庭作业*,但我们还是开始吧。
你为什么要获取
ELABORATO.SH
脚本?如果你这样做了,并且它有一个exit
语句或错误,你的TEST.SH
脚本也会这样做。我不认为这是你想要的。我只需运行脚本:bash ELABORATO.SH param1 param2
您是否考虑过重定向其输入?
bash ELABORATO.SH param1 param2 < INPUT_FILE
要捕获的输出
ELABORATO.SH
,那么重定向似乎不是制成为了那个原因?bash ELABORATO.SH param1 param2 < INPUT_FILE > OUTPUT_FILE
找出ELABORATO.SH
写入的文件并非易事。(旁白:如果您不知道其输出文件,那么它们与计算的分数有什么关系ELABORATO.SH
?为什么还要费心移动它们?)
无论如何,我们开始吧。以下管道列出了由创建的文件ELABORATO.SH
:
strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE \
| grep '^open(.*O_CREAT' | cut -d\" -f 2
然后要将它们移动到其他地方,您可以执行以下操作:
for f in $(
strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE
| grep '^open(.*O_CREAT' | cut -d\" -f 2)
do
mv "$f" /path/to/elsewhere
done
*) 请向您的主管推荐 AskUbuntu 的友好员工。