gpt4 book ai didi

Bash 脚本不等待读取

转载 作者:行者123 更新时间:2023-11-29 08:52:21 24 4
gpt4 key购买 nike

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

关于为什么这不会在 read nameread email 上停止有任何想法吗?

最佳答案

read 从 stdin 读取,bash 从 sudo 继承它的 stdin,它来自 heredoc。如果您希望它来自其他地方,则需要明确说明。例如:

bash  3<&0 << 'END_COMMAND'
...
read <&3
...

然而,这不适用于 sudo,因为 sudo 会关闭非标准文件描述符。但是 sudo 不会关闭 stderr,所以如果您可以重用该文件描述符,您可以这样做:

sudo -H -u "$username" bash 2<&0 << 'END_COMMAND'
...
read -u 2 email
...

但这样做可能更安全:

sudo -H -u "$username" bash << 'END_COMMAND'
...
read email < /dev/tty
...

关于Bash 脚本不等待读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com