我是脚本新手。在尝试执行以下操作时遇到问题。请帮忙。
我的C ++程序在while循环中运行,在提示符下接收来自用户的命令,然后执行它们。我想自动化这个过程。
示例执行
$ ./my_tool
my_prompt> command1 arg1 arg2
result: abc
my_prompt> command2 arg3
result: xyz
my_prompt> command3 abc xyz
result: my_result
my_prompt> exit
$
现在,我想要一个文件input.txt,它将具有
command1 arg1 arg2
command2 arg3
command3 <abc> <xyz>
exit
脚本的执行类似于
./run ./my_tool input.txt
如何编写一个简单的bash脚本来实现这一目标?我将至少有20个命令。
如果我没有命令3,即所有输入参数都已预先确定,那么我该如何进行?
很抱歉,如果这很简单 - 我无法理解。
谢谢和问候, SB
答案 0 :(得分:0)
您可以将文件逐行传递给二进制文件stdin:
<?php
function something(){
//some code
$whatever = 3;
$some = ["Peace", "Amongst", "All", "Humanity"];
return $some[$whatever];
}
$var = something();
var_dump($var); //<== DUMPS :: "Humanity"
echo $var; //<== ECHOES:: "Humanity"
快速解释:
IFS的东西将确保文件将逐行读取,否则它将在每个空格上创建一个新的迭代。行#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
eval $1 < $line
done <<< "$2"
将./my_tool < $line
作为$line
传递给您的程序,因此stdin缓冲区(您将从中读取用户输入)填充数据,因此您的程序将读取“输入” 。 stdin
将第一个参数作为文件传递给while循环输入,其中done < "$2"
将读取输入。 read
将是您在执行时传递脚本的文件名。 $2
将运行存储在eval $1
中的命令,该命令是脚本的第一个参数。
使用它运行:
$1