我有一个运行良好的脚本,但是当我今天运行它时,它说declare: not found
. 我正在使用 bash shell,并且脚本开头的路径是正确的。
我的脚本中有两个标记的行如下:
declare -a RESPONSE
RESPONSE=($RESULT)
它还说(
是出乎意料的,但我想这是因为第一个错误而出现的。值得一提的是,当我直接输入 declare 时工作正常。
declare | grep USER
节目
USER=ashfame
USERNAME=ashfame
values="$SVN_BASH_USERNAME";
那么,这里有什么问题?
你用的是
sh
代替bash
吗?sh
(链接到dash
)不支持declare
关键字,也不支持语法用于初始化数组。
我怀疑您的“shebang”行(文件的可选第一行)正在引用
sh
而不是bash
. 它应该是用于 bash 脚本。如果脚本的第一行是
那么这将表明将使用严格兼容 bourne 的 shell;在 Ubuntu 的情况下,
dash
使用。在许多其他发行版中,这不会导致问题,因为它们链接/bin/sh
到/bin/bash
; 但是 ubuntu 链接到/bin/dash
是为了让系统脚本运行得更快。declare
内置函数是Bourne shell 脚本规范的bash
众多扩展之一;dash
只是实现该规范而不进行扩展。如何重现上述错误:
我正在使用 Ubuntu 14.04 64 位。将此代码放在一个文件中:
像这样运行它:
要修复它,请改为执行以下操作:
印刷:
我遇到了同样的问题,然后我记得您需要分配正确的权限才能执行 shell 脚本。
更改脚本的权限,例如:
如果(
/bin/bash
:sh
代替 :
尝试 :
在 Ubuntu 上,您可能有一个脚本在其中执行其他脚本,我遇到过。
更改所有
sh some_script.sh
以$SHELL some_script.sh
修复它。