【问题标题】:Writing command response to an output file in KornShell script将命令响应写入 KornShell 脚本中的输出文件
【发布时间】:2023-11-19 12:08:01
【问题描述】:

我想在输出文件中捕获以下 ./symmir 可执行文件的输出。

可执行文件首先询问我是否要继续。正如您在以下 KornShell (ksh) 脚本中所见,我对问题的回答是“Y”。我想在回答问题后专门捕获响应。

#!/bin/ksh
./symmir <<EOF
Y
EOF

以下内容将不起作用,因为它只会将问题重定向到 file1 而不是我回答问题后的响应。

#!/bin/ksh
./symmir >> file1 <<EOF
Y
EOF

感谢您的帮助。

【问题讨论】:

  • 我怀疑symmir 是供应商提供的命令,并且可以选择取消确认提示。最好使用这种机制。

标签: shell unix scripting ksh


【解决方案1】:

如果知道答案的行数,你可以这样做:

# assumed 1 line in the answer
./symmir <<EOF |tail -n 1 >>file1
Y
EOF

或者,如果您可以让symmir 将问题和答案输出到不同的流 - 一个到 stdout,一个到 stderr,您可以只重定向其中一个:

# assumed symmir writes answer to stderr: echo $answer 1>&2
./symmir <<EOF 2>>file1
Y
EOF

【讨论】:

    【解决方案2】:

    #!/bin/ksh
    ./ask_me <<EOF >> file1
    Y
    EOF
    

    工作?

    但是,你的代码

    #!/bin/ksh
    ./ask_me >> file1 <<EOF 
    Y
    EOF
    

    在我的测试中也可以正常工作。

    获取/打印字符串的代码是(ask_me.c):

     #include <stdio.h>
    
     int main()
     {
       char input[256];
       gets(input); /* Unsafe */
    
       printf("You have entered '%s'\n", input);
    
       return 0;
     }
    

    【讨论】:

    • ./ask_me > file1 和 ./ask_me >> file1
    【解决方案3】:

    这可能是 EMC symcli symmir 命令吗?

    如果是这种情况,请使用-noprompt 选项,它会阻止命令要求确认。

    【讨论】: