管道代码到 sh — 脚本不等待读取命令

Pipe Code to sh — Script not waiting on read Command

我的远程文件内容:

#!/bin/sh
read foo && echo "$foo"

我在本地终端上做的事情:

$ curl -fLSs http://example.com/my-remote-file.sh | sh

我期待的是:

下载的脚本应提示用户输入内容并等待用户输入。

实际发生了什么:

下载的脚本跳过read命令并继续执行。

问题:

如何提示用户从通过 curl 下载的脚本中输入内容?我知道 sh <(curl -fLSs http://example.com/my-remote-file.sh) 有效,但这不符合 POSIX 标准,我想实现这一点。

问题是 stdin 正在从 curl 而不是键盘读取。您需要更改脚本以指示它专门从终端读取,如下所示:

read input < /dev/tty
echo $input