2014-06-05 118 views
0

我在网上的某个地方提供了shell脚本,我想取回并在本地执行。通常我会这样做:wget -qO- remote_script.sh | sh在本地执行远程shell脚本时被忽略的提示

这很好,但是当脚本中有提示read -p "Prompt" yn时,它会被忽略。

什么是最简单和最短的解决方案?

回答

2

您需要避免该shell的stdin被用于读取命令。试试这个:

sh <(wget -q0- remote_script.sh) 

进程替换的行为像一个文件,所以sh的标准输入仍应该可用于该读取命令。

+0

啊哈,那是什么我在想,sh的stdin在管道文件内容时可能不可用。我发现了另一个解决方案: '''sh -c“'wget -qO-remote_script.sh'”''' 哪一个更好? – Roman

+0

@Roman使用'$()'而不是'''''它可能比'<()'更好,因为'“”'完全分配缓冲区上的整个脚本。当管道缓冲区有限时,使用'<()'下载可能会延迟,而脚本没有读取脚本的其他行。尽管如此,这取决于实施。 – konsolebox

+0

@罗曼我实际上建议这个答案被接受,因为这个概念是相似的,因为你也分享了你自己的其他答案。我给了我的+1。 – konsolebox

0

这可能是因为您将脚本的内容传送到sh,这是在shell中单独发送每个命令的行。如果你的脚本是: #/斌/庆典 读-p “提示:” YN 回声$ YN

这是正在执行什么: $读-p “提示:” YN 提示:回声$ YN $

你应该做的,而不是为保存脚本,然后像这样运行: $的wget -q -O myscript.sh remote_script.sh & & SH myscript.sh