gpt4 book ai didi

linux - Shell:bash 3.2.57 到 4.3.41 在 read -t 选项中的区别?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:23 27 4
gpt4 key购买 nike

我一直在我的笔记本电脑 (OSX 10.11.6) 上运行以下代码,它按我想要的方式运行(bash 版本 3.2.57):

dir=""
thread=1
an="bla"

usage() { echo "Usage: Script -d <homedir> -t <threads> -a <bla or blubb>"
echo " "
echo "Options:"
echo "-h|?|--help show brief help"
1>&2;
exit 1;
}

while getopts ":d:t:a:" o; do
case "${o}" in
d)
d=${OPTARG}
dir=$d;;
t)
t=${OPTARG}
thread=$t;;
a)
a=${OPTARG}
***(($a == "bla" || $a == "blubb")) || usage***
an=$a;;
:)
echo "Missing option argument for -$OPTARG" >&2; exit 1;;
*)
usage;;
esac
done
shift $((OPTIND-1))

if [ -z "${d}" ] || [ -z "${t}" ] || [ -z "${a}" ]; then
usage
fi

***read -t 10 -p "Every parameter set as you wanted? Enter Y/y, space or ENTER! -n 1 -r REPLY***
echo "" # (optional) move to a new line
case $REPLY in
[yY] | "")
echo "correct";;
*)
echo "Terminating"
exit 1;;
esac

试图让它在 linux 服务器(Ubuntu 16.04)上运行 bash 版本 4.3.41 给了我这 3 个错误(上面用 *** 标记的行),我不知道为什么:

sh testing_stuff.sh -d /home/ -t 2 -a bla
testing_stuff.sh: 29: testing_stuff.sh: [[: not found
testing_stuff.sh: 29: testing_stuff.sh: bla==blubb: not found
testing_stuff.sh: 45: read: Illegal option -t

我已经将标记的其中一行更改为:

            a)
a=${OPTARG}
***[[$a == "bla" || $a == "blubb"]] && usage***
an=$a;;

但这并没有改变任何东西。我实际上不知道为什么这可以在我的笔记本电脑上正常运行,但在服务器上却不行。

请让我知道我在哪里犯了错误。

最佳答案

在 Ubuntu 上,默认的 shell 是 dash。但是,您的脚本使用 bash 功能。要解决此问题,请替换:

sh testing_stuff.sh -d /home/ -t 2 -a bla

与:

bash testing_stuff.sh -d /home/ -t 2 -a bla

在 Ubuntu 和其他类似 debian 的系统上,默认的 shell,/bin/sh,是 dash。 Dash 符合 POSIX 标准、轻量级且速度快,但它不支持较重的 bash 支持的所有功能。如果您的脚本需要 bash,而您的需要,请在 bash 下显式运行它。

关于linux - Shell:bash 3.2.57 到 4.3.41 在 read -t 选项中的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39236624/

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