程序只有在由强制超时的shell脚本运行时才没有输出

cngwdvgl  于 2023-01-05  发布在  Shell
关注(0)|答案(2)|浏览(133)

我将首先编写一系列要运行的命令

echo <some_input> | <some_command> > temp.dat & pid=$!
sleep 5
kill -INT "$pid"

当我在bash shell中逐个运行时,上面的命令运行得非常好,temp.dat文件中的内容正是我想要的,但是,当我创建一个包含相同命令集的bash脚本时,temp.dat文件中什么也得不到。
现在,我将说明为什么我以这样的方式编写这些命令:
1.请求<some_command>输入,这就是我为什么<some_input>
1.我希望该命令的输出在一个单独的文件中,这就是为什么我重定向了输出。
1.我想在一段时间后通过发送SIGINT信号来终止该命令。
我试着在shell脚本的第一行中写入#!/bin/bash -i来运行交互式shell,但它不起作用。
将理解实现相同结果的任何替代方法。

  • 更新:<some_command>也调用了一个python脚本,但我不认为这会导致它的行为有所不同。
  • Update2:python脚本是导致这种不同行为的唯一原因。
5lhxktic

5lhxktic1#

一个可能的原因是Python进程可能没有在允许的5秒运行时间内刷新stdout。

export PYTHONUNBUFFERED=1

......将导致内容被迅速写入,而不是等待进程退出/文件关闭/缓冲内容量达到足以证明刷新操作开销合理的水平。

bprjcwpo

bprjcwpo2#

这个对你有用吗?

read -p "Input Data : " inputdata ; echo $inputdata > temp.data ; sleep 5; exit

奥布夫斯

#!/usr/bin/env bash 

read -p "Input Data : " inputdata
echo $inputdata > temp.data
sleep 5

应该像脚本一样工作
适合:D

#!/usr/bin/env bash 

read -p "Input Data : " inputdata
<code you write eg echo $inputdata> > temp.data
sleep 5

相关问题