gli*_*dud 6 terminal bash command-line
假设我有一个 bash 脚本:
#!/bin/bash
read -p "Gimme some stuff: " stuff
echo "**${stuff}**"
Run Code Online (Sandbox Code Playgroud)
如果脚本是通过管道调用的,例如:
echo "Here's some stuff" | ./myscript.bash
Run Code Online (Sandbox Code Playgroud)
然后read命令将从管道中读取。即使我在点击该命令之前尝试清除 stdinread,它仍然会立即返回。
有什么办法吗?如果我无法控制调用脚本的方式,有没有办法强制它接受 aread或select来自终端的输入?如果没有,是否有任何偷偷摸摸的方法来暂停脚本以从标准输入以外的用户那里获取输入?
是的。终端总是/dev/tty。所需要做的就是read从终端而不是标准输入获取输入:
#!/bin/bash
read -p "Gimme some stuff: " stuff </dev/tty
echo "**${stuff}**"
Run Code Online (Sandbox Code Playgroud)
在操作中,这看起来像:
$ echo asdfdsaf | read.sh
Gimme some stuff: 123
**123**
Run Code Online (Sandbox Code Playgroud)
这里我们/dev/tty作为文件描述符 3打开。该选项-u 3告诉read使用文件描述符 3:
exec 3<>/dev/tty
read -u 3 -p "Gimme some stuff: " stuff
echo "**${stuff}**"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4103 次 |
| 最近记录: |