linux自动执行脚本和收集原本打印的结果?

一个很初级的问题...
我对shell script不是很熟悉。正在使用一个别人编写的sh脚本。

bash xx.sh之后
用read 显示有文字,提示输入参数。(可能不止一层输入)
结果会用printf返回
比如

输入bash xx.sh 
输入回车
打印一行字要求输入数字  
输入2 
输入回车 
打印一行字要求输入数字
输入3 
输入回车 
打印结果

我现在希望能够定期自动地执行(参数固定的),之后把它原本printf的结果写入一个txt。

cron定期执行shell script我是会,
但是不知道怎么在脚本里调用这种脚本(传入参数和收集结果)
我只知道那种命令行接收参数的...

除了直接改这个ssh文件(把read和printf 改为从命令行接受参数、结果写入txt),有其他的办法吗?

编写一个新脚本:调用这个sh文件、传入参数、收集原本printf——这样可以实现吗?如何实现呢?

谢谢!

6个回答

sh xx.sh >>result.txt << EOF
2
3
EOF
其中EOF跟EOF之间每行都要回车,2、3为你要输入的固定的内容。

melon_15
melon_15 回复u012874788: 原来还可以还可以这样,谢谢!学习到了。(我的问题解决了,还是自己shell知识不够又偷懒没研究原脚本。原脚本的提示输入那步的写法是echo && stty erase '^H' & read -p "请输入数字:" num 我把第一步交互的read之间的stty erase 这个命令去掉了就成了。。。)
大约一年之前 回复
u012874788
从小就很疯 回复u012874788: 这样就行了,在<<前面加一个 |&>&1,read -p的输出是写到了|&里面的,这样就可以把-p的提示一起放到result.txt里面了
大约一年之前 回复
u012874788
从小就很疯 sh xx.sh >>result.txt |&>&1 << EOF 2 3 EOF
大约一年之前 回复
u012874788
从小就很疯 回复melon_15: 如果你脚本里面是read -p做提示的话,-p后面的提示信息没办法输出到result.txt里面,貌似这个-p的提示不是写到标准输出的。
大约一年之前 回复
u012874788
从小就很疯 回复melon_15: 这是2个交互,如果你需要输入多个的话,就一直一回车一个交互,最后EOF结尾
大约一年之前 回复
u012874788
从小就很疯 回复melon_15: EOF回车2回车3回车EOF
大约一年之前 回复
melon_15
melon_15 不好意思我重看了一下。试了试它收集的是第一次打印的结果那个prompt之前的部分。就是printf输出成功了;随后的read命令的prompt没有。。。
大约一年之前 回复
melon_15
melon_15 多谢这个清晰的示范!唯一的问题是这样会报错。请问是分4行的意思吗?还是两两中间还需要一个回车?我试了都有这个错误。“stty: 'standard input': Inappropriate ioctl for device”我搜到帖子说说明脚本需要一个终端但是没得到终端。最后txt收集到的是第一个的打印内容(“请输入数字”)。所以2,3它都没有接收到。
大约一年之前 回复

bash xx.sh < para.txt
在para.txt中将需要输入的命令行参数都按行给出来就行了吧。

melon_15
melon_15 谢谢!但是我这里不是需要传递命令行参数...
大约一年之前 回复

接楼上说法:
crontab

  • * * * * /bin/bash xx.sh >result.txt
    定时 脚本 参数 结果
melon_15
melon_15 谢谢,我搜了一下,>就是我在寻找的导出结果的命令!但是传入参数我还是失败。。
大约一年之前 回复

在新的shell脚本中写
echo $1 $2
##调用这个sh文件、传入参数、收集原本printf(print是运行结果,直接用重定向命令就可)
sh xx.sh $1 $2 >result.txt

melon_15
melon_15 谢谢你的解释。原来叫”重定向命令“。。
大约一年之前 回复

搜一下《Advanced Bash-Scripting Guide》里的“Here Documents”,应该好理解的。再搞一个脚本封装一下就好了

melon_15
melon_15 感谢推荐!我正缺这种系统教材!
大约一年之前 回复

调用脚本,传入参数并收集结果:echo -e "2\n3" | bash xx.sh >> result.txt
定期执行:watch -n 2 "echo -e "2\n3" | bash xx.sh >> result.txt" (-n 2代表每两秒执行一次)

melon_15
melon_15 谢谢你的例子!
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!