Bash脚本不等待阅读

alu*_*ach 9 bash

我正在尝试以另一个用户身份运行命令并以该用户身份读取输入.由于某种原因,脚本不会暂停read命令,我不确定为什么.这是脚本的一个例子:

#!/bin/bash
username='anthony'
sudo -H -u "$username" bash << 'END_COMMAND'

# Commands to be run as new user
# -------------------------------

echo "#!  Running as new user $USER..."


echo "#!  Gathering setup information for $USER..."
echo -n "Enter your name and press [ENTER]: "
read name
echo -n "Enter your email and press [ENTER]: "
read email
END_COMMAND

echo "Done"
Run Code Online (Sandbox Code Playgroud)

关于为什么这不停止read name或任何想法read email

Wil*_*ell 22

read从stdin读取,并bash从sudo继承其stdin,来自heredoc.如果你想让它来自其他地方,你需要明确.例如:

bash  3<&0 << 'END_COMMAND'
...
read <&3
...
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于sudo,因为sudo会关闭非标准文件描述符.但是sudo并没有关闭stderr,所以如果你能够重用那个文件描述符,你可以做到:

sudo -H -u "$username" bash 2<&0 << 'END_COMMAND'
...
read -u 2 email
...
Run Code Online (Sandbox Code Playgroud)

但它可能更安全:

sudo -H -u "$username" bash << 'END_COMMAND'
...
read email < /dev/tty
...
Run Code Online (Sandbox Code Playgroud)