用输入执行Nohup命令


11

在UNIX中,我有一个要使用nohup运行的进程。但是,此过程有时会在提示下等待我输入yesno继续。到目前为止,在UNIX中,我一直在执行以下操作:

nohup myprocess <<EOF
y
EOF

因此,我使用nohup启动进程“ myprocess”,并使用“ y”将其管道传输到文件中,然后关闭文件。上面的行实际上是三个单独的命令-即,我在UNIX的第一行中按Enter,然后得到提示,我在其中输入'y',然后按Enter以最后键入'EOF',然后再次按回车键。因此,这很完美,但是我的问题在下面。

我现在想在Perl中执行此命令,但是由于三行以上,因此我不确定如何执行此命令。我不知道以下方法是否有效:

my $startprocess = `nohup myprocess <<EOF &
y
EOF
`

这应该按照问题中的编写方式进行工作(在第一次编辑后变得有点荒谬)

@hop我真的不知道您在说什么,第一次编辑添加了换行符,并将外壳部分格式化为代码,以便它们可以正确显示。我几乎什么都没改变,原来的版本在这里
Michael Mrozek

@迈克尔:你是对的,对不起。我误解了差异和思想,您添加了反引号。使得这个问题变得更加荒谬:给出的例子应该起作用。

@hop perl一个吗?我以为我不了解perl就无法尝试,但我想他说:“我不知道以下内容是否可行”,所以也许还不错。您可能应该回答给出的示例有效
Michael Mrozek

Answers:


19

如果您只想向y进程的标准输入写一个,可以执行以下操作:

(echo y | nohup myprocess) &

如果您想继续y为出现的每个提示编写内容,则yes存在coreutil 正是出于此目的-它会继续将您告诉它的内容写到stdout。它的默认值是输出“ y”,因此您可以:

(yes | nohup myprocess) &

但是如果您需要其他东西,可以将其作为参数传递


+1:我没见过yes使用过eons
msw

迈克尔,谢谢您的及时答复。但是,我想我已经尝试过您的建议,以便在流程中回显Y。完成此操作后,尽管我确保在我的

&不会阻止将过程输出写入控制台。它只是在后台启动。
fschmitt

这个答案与问题有什么关系?

@Riccardo我做了一些实验,我认为你是对的。已修正,谢谢
Michael Mrozek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.