从另一个脚本运行 bash 脚本并重定向其输出

从另一个脚本运行 bash 脚本并重定向其输出

大家好,我要做一个程序..我会非常简洁地解释它...我已经做了什么以及我必须做什么......

简单地说,我必须在 Bash 中做一个“模拟器”,运行学生的练习并检查它们是否正确……对于每个练习,我必须计算一个分数并判断学生是否通过了考试……

我几乎做完了所有事情...我想我只差几行代码就可以写出来了...但我认为它们也是最重要的... :(

我的脚本是 TEST.SH,我必须运行学生的练习..练习是一个脚本 ELABORATO.SH...现在,我可以有一些场景:

  1. ELABORATO.SH 等待输入一些值作为参数;
  2. ELABORATO.SH 等待来自标准输入、键盘的输入;
  3. ELABORATO.SH 将输出写入文件/fifo/等中;

  1. 首先,解决起来非常简单...实际上,我从 TEST.SH 调用ELABORATO.SH以下命令:

    . ELABORATO.SH param1 param2 param3;
    

    第二和第三个对我来说更复杂。

  2. 我必须从文件中读取一个字符串(没问题)并将该字符串传递给它,ELABORATO.SH因为该字符串来自 stdin。

  3. 我必须创建一个包含ELABORATO.SH...输出的文件,例如,如果ELABORATO.SH生成一个文件(我不知道输出文件的名称),我还必须在另一个目录中生成一个文件...我该怎么办?

答案1

这听起来很像家庭作业*,但我们还是开始吧。

  1. 你为什么要获取ELABORATO.SH脚本?如果你这样做了,并且它有一个exit语句或错误,你的TEST.SH脚本也会这样做。我不认为这是你想要的。我只需运行脚本:

    bash ELABORATO.SH param1 param2
    
  2. 您是否考虑过重定向其输入?

    bash ELABORATO.SH param1 param2 < INPUT_FILE
    
  3. 要捕获的输出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 的友好员工。

相关内容