Nic*_*lin 47 zsh bash-scripting
编辑:
似乎在bash. 看来问题与zsh. 如果有更好的网站可以发布此问题,请告诉我。
我正在编写一个创建一系列目录的简单脚本。我希望用户在我这样做之前给予确认。我使用以下作为基础,但似乎无法让它在 bash 函数中运行。如果我把它放在函数之外,它工作正常。这是一个孤立的例子:
读.sh
#!/bin/bash
test() {
read -p "Here be dragons. Continue?" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
echo "You asked for it..."
fi
}
Run Code Online (Sandbox Code Playgroud)
来自this SO post的代码。
获取文件和/或test导致以下错误:read:1: -p: no coprocess. 当我把它放在我的.bashrc
编辑::
@hennes
zshSco*_*ott 81
该–p选项与bash's readbuilt-in command 和zsh's readbuilt-in 命令的含义不同。inzsh的read命令,–p意思是——猜测——“输入是从协进程中读取的。” 我建议您使用echo或显示提示printf。
您可能还需要替换–n 1为–k或–k 1。
在zsh同等bash的read -p prompt就是
read "?Here be dragons. Continue?"
Run Code Online (Sandbox Code Playgroud)
?第一个参数中a 之后的任何内容都用作提示字符串。
当然,你可以指定一个变量名来读入(这可能是更好的风格):
read "brave?Here be dragons. Continue?"
if [[ "$brave" =~ ^[Yy]$ ]]
then
...
fi
Run Code Online (Sandbox Code Playgroud)
(引用 shell 变量通常也是一个好主意。)
这段代码似乎可以在 zsh 中执行您想要的操作。
(请注意,您提到的问题明确提到它是针对 bash 的)。
#!/usr/bin/env zsh
测试()
{
echo -n “这里有龙。继续?”
阅读回复
如果 [[ $REPLY =~ ^[Yy]$ ]]
然后
echo "你要的……"
菲
}
测试
三个评论:
y或Y,n或N可选:重复问题,直到提供批准问题
可选:忽略任何其他答案
可选:如果需要,退出终端
confirm() {
echo -n "Continue? y or n? "
read REPLY
case $REPLY in
[Yy]) echo 'yup y' ;; # you can change what you do here for instance
[Nn]) echo 'nope n' ;;
# Here are a few optional options to choose between
# Any other answer:
# 1. Repeat the question
*) confirm ;;
# 2. ignore
# *) ;;
# 3. Exit terminal
# *) exit ;;
esac
# REPLY=''
}
Run Code Online (Sandbox Code Playgroud)还要注意这一点:在此函数的最后一行清除 REPLY 变量。否则,如果您echo $REPLY会看到它仍然处于设置状态,直到您打开或关闭终端或再次设置它。
| 归档时间: |
|
| 查看次数: |
23301 次 |
| 最近记录: |