Linux Shell:read-t选项中bash3.2.57与4.3.41的区别?
我已经在我的笔记本电脑(OSX 10.11.6)上运行了以下代码,它按照我的要求工作(bash版本3.2.57): 我已将其中一个标记行更改为:Linux Shell:read-t选项中bash3.2.57与4.3.41的区别?,linux,bash,macos,shell,Linux,Bash,Macos,Shell,我已经在我的笔记本电脑(OSX 10.11.6)上运行了以下代码,它按照我的要求工作(bash版本3.2.57): 我已将其中一个标记行更改为: a) a=${OPTARG} ***[[$a == "bla" || $a == "blubb"]] && usage*** an=$a;; 但这并没有改变任何事情。事实上,我不知道为什么这在我的笔记本电脑上可以正常工作,但在服务器上却不行
a)
a=${OPTARG}
***[[$a == "bla" || $a == "blubb"]] && usage***
an=$a;;
但这并没有改变任何事情。事实上,我不知道为什么这在我的笔记本电脑上可以正常工作,但在服务器上却不行
请告诉我我在哪里犯了错误。在Ubuntu上,默认shell是
dash
。但是,您的脚本使用了bash
功能。要解决此问题,请更换:
sh testing_stuff.sh -d /home/ -t 2 -a bla
与:
在Ubuntu和其他类似debian的系统上,默认的shell,
/bin/sh
,是dash
。Dash兼容POSIX,重量轻,速度快,但它不支持较重的bash
所支持的所有功能。如果您的脚本需要bash
,而您的脚本需要,请在Ubuntu上的bash
下显式运行它,默认shell是dash
。但是,您的脚本使用了bash
功能。要解决此问题,请更换:
sh testing_stuff.sh -d /home/ -t 2 -a bla
与:
在Ubuntu和其他类似debian的系统上,默认的shell,
/bin/sh
,是dash
。Dash兼容POSIX,重量轻,速度快,但它不支持较重的bash
所支持的所有功能。如果您的脚本需要bash
,而您的脚本需要,请在bash
下显式运行它。更好的是,添加一个#/bin/bash
shebang行并在命令行中键入shell。是的,我在脚本中这样做。但是,OP使用的是sh脚本
,这覆盖了shebang。谢谢@John1024,这对我很有帮助。但是我有一条蛇帮路线,我不得不像你建议的那样叫它。谢谢大家的宝贵意见。只有当您直接调用命令时,才会考虑使用shebang,例如testing_stuff.sh-d/home/-t2-a bla
当您将sh
放在前面时,您显式地调用了sh
,这是Ubuntu上的dash
。更好的是,添加一个/bin/bash
shebang行并在命令行中键入shell。是的,我在脚本中这样做。但是,OP使用的是sh脚本
,这覆盖了shebang。谢谢@John1024,这对我很有帮助。但是我有一条蛇帮路线,我不得不像你建议的那样叫它。谢谢大家的宝贵意见。只有当您直接调用命令时,才会考虑使用shebang,例如testing_stuff.sh-d/home/-t2-a bla
当您将sh
放在前面时,您明确地调用了sh
,这是Ubuntu上的dash
。
sh testing_stuff.sh -d /home/ -t 2 -a bla
bash testing_stuff.sh -d /home/ -t 2 -a bla