我正在尝试以另一个用户身份运行命令并以该用户身份读取输入.由于某种原因,脚本不会暂停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)