linux - bash脚本无法要求确认
问题描述
我开始自己编写 shell 脚本,我需要向用户询问确认。
我有这个脚本,我不知道为什么下面的命令不起作用: 阅读 -p “你确定这个动作吗?” 因
我使用它两次,在脚本的开头和中间。第一次阅读有效,但第二次阅读......没有工作......
顺便说一句,我的 linux 发行版是 debian 9.3
#!/bin/bash
read -p "holaaa" yn #HERE THE COMMAND WORKS AS EXPECTED
if [[ -e "$1" && -f "$1" ]]; then
while read nom grup permisos fitxer; do
if [ -e $fitxer ]; then
#echo $fitxer
#f=$(stat -c %n $fitxer) #jo voldria fer servir awk...
u=$(stat -c %U $fitxer)
g=$(stat -c %G $fitxer)
p=$(stat -c %a $fitxer)
if [[ "$p" != "$permisos" || "$u" != "$nom" || "$g" != "$grup" ]]; then
echo "Informacio al fitxer: $nom , $grup, $permisos, $fitxer"
echo "Informacio real: $u, $g, $p, $fitxer"
#posar confirmation
read -p "holaaaa" yn #HERE THE COMMAND IS NOT WORKING
chown $u:$g $fitxer
chmod $permisos $fitxer
fi
else
echo "file $fitxer does not exist"
fi
done < "$1"
else
echo "error" >&2
fi
有谁知道为什么会发生这种情况或我做错了什么?
解决方案
循环内部read
从相同的源读取条件为 ( < "$1"
)。
并且不显示提示,因为它仅在输入来自终端时显示。
您可以通过添加明确地使内部read
从终端读取< /dev/tty
,例如:
read -p "holaaaa" yn < /dev/tty
或者您可以通过<&0
重定向从标准输入中读取(文件描述符0
用于标准输入)。正如评论者所指出的,这具有命令的调用者将能够提供预设响应的优点。例子:
read -p "holaaaa" yn <&0
推荐阅读
- python - 从 nodejs 访问 opencv 的 Python 脚本。
- excel - 在 Excel 中为图表选择数据时跳过行的语法是什么?
- python - 无法解析剩余部分:'{{ list[loop.index0] }}'
- python - 如何在没有 '[ ]' 和 ' ' 的情况下将字符串转换为列表
- python - 使用 discord.py 模块创建不和谐机器人时出错。我认为这与使用 anaconda 进行安装有关
- machine-learning - 使用进一步优先遍历和 k-mean++ 进行 K-means 初始化
- javascript - 如何从外部 JSON 文件一次显示一张图像 - 创建幻灯片
- php - 表单的选择输入不会在 php 电子邮件上呈现
- python - CVXPY 向量约束
- javascript - 检查 div 是否可见或隐藏并切换类