Ubuntu下运行Shell脚本时显示“declare not found”的问题
2016-08-13 16:51
651 查看
此种问题只在 Ubuntu 下才会出现!安装 debian 系统根本不存在此类问题,因为只有 Ubuntu 把默认的 bash 替换成了 dash.
在使用 debian 一天后感觉:Ubuntu 好像要弄出来一个 Linux 世界里的"Windows 7". 自己 Linux 刚入门,不知见解是否有问题,欢迎提出不同意见。谢谢!
- - - - - - - - - - - - - - - - -
在学习 Shell 脚本的时候,有两个例子在运行时出现异常。比如,我在 test-dash.sh 脚本输入如下内容:
在 Ubuntu 系统下使用 sh test-bash.sh 运行将出现如下提示信息:
-e Trekshot.
test-dash.sh: 2: declare: not found:
有两个问题:
a. echo 的参数 '-e' 怎么也打印出来了?
b. 一个简单的整数声明语句为何提示 "declare: not found"?
1.
出现此问题的原因并非代码本身有误,而是 Ubuntu 系统的问题。我们在编写脚本时,第一行经常要写这么一行内容:#!/bin/bash. 这是对该脚本所使用的 shell 进行声明,因为
Linux 上的 shell 并非只有一种,而各个 shell 的语法是由差别的。之所以把 echo 命令的参数误打出来,就是因为 sh 命令没有理解该语法,即当前使用的并不是 bash.下面来证
明:
获取 /bin 中相关文件的属性:
这表明在执行 sh test-dash.sh 的时候,我们使用的是一个叫 "dash" 的命令(注意 sh 实为链接文件),而并不是脚本第一行中声明的 bash. 这就是上面现象的原因。 其实,如
果使用 bash test-dash.sh 命令执行的话,上面两个错误根本不会出现。
2.
dash(Debian Almquist SHell) Ubuntu 自 6.10 后,将先前的 bashshell 更换成了 dash (有待考证). 在设置 dash 的说明中有下面文字:
大致意思是说默认的 shell 是 bash shell, 但只要是能兼容 POSIX 的 shell 都可以,而dash 比 bash 速度更快、更小巧,因此 Ubuntu 安装了 dash.
3.
怎么能把 dash 去掉而使用默认的 bash?使用如下命令:
sudo dpkg-reconfigure dash
此命令是对已安装的包进行重新配置,在菜单(dash-bash-sh.png)中选择是否将 sh 链接
到 dash (Install dash as /bin/sh?) 选择否即可。
附图一:Ubuntu 下设置 dash 界面
在使用 debian 一天后感觉:Ubuntu 好像要弄出来一个 Linux 世界里的"Windows 7". 自己 Linux 刚入门,不知见解是否有问题,欢迎提出不同意见。谢谢!
- - - - - - - - - - - - - - - - -
在学习 Shell 脚本的时候,有两个例子在运行时出现异常。比如,我在 test-dash.sh 脚本输入如下内容:
</pre><pre name="code" class="plain">echo -e "Trekshot. \a \n" declare -i number=7 echo $number
在 Ubuntu 系统下使用 sh test-bash.sh 运行将出现如下提示信息:
-e Trekshot.
test-dash.sh: 2: declare: not found:
有两个问题:
a. echo 的参数 '-e' 怎么也打印出来了?
b. 一个简单的整数声明语句为何提示 "declare: not found"?
1.
出现此问题的原因并非代码本身有误,而是 Ubuntu 系统的问题。我们在编写脚本时,第一行经常要写这么一行内容:#!/bin/bash. 这是对该脚本所使用的 shell 进行声明,因为
Linux 上的 shell 并非只有一种,而各个 shell 的语法是由差别的。之所以把 echo 命令的参数误打出来,就是因为 sh 命令没有理解该语法,即当前使用的并不是 bash.下面来证
明:
获取 /bin 中相关文件的属性:
-rwxr-xr-x 1 root root 725136 2008-05-13 02:48 bash -rwxr-xr-x 1 root root 87924 2008-06-21 00:07 dash lrwxrwxrwx 1 root root 4 2010-03-25 14:29 sh -> dash
这表明在执行 sh test-dash.sh 的时候,我们使用的是一个叫 "dash" 的命令(注意 sh 实为链接文件),而并不是脚本第一行中声明的 bash. 这就是上面现象的原因。 其实,如
果使用 bash test-dash.sh 命令执行的话,上面两个错误根本不会出现。
2.
dash(Debian Almquist SHell) Ubuntu 自 6.10 后,将先前的 bashshell 更换成了 dash (有待考证). 在设置 dash 的说明中有下面文字:
The default /bin/sh shell on Debian and Debian-based systems is bash. However, since the default shell is required to be POSIX-compliant, anyshell that conforms to POSIX, such as dash, can serve as /bin/sh. You may wish to do this because dash is faster and smaller than bash.
大致意思是说默认的 shell 是 bash shell, 但只要是能兼容 POSIX 的 shell 都可以,而dash 比 bash 速度更快、更小巧,因此 Ubuntu 安装了 dash.
3.
怎么能把 dash 去掉而使用默认的 bash?使用如下命令:
sudo dpkg-reconfigure dash
此命令是对已安装的包进行重新配置,在菜单(dash-bash-sh.png)中选择是否将 sh 链接
到 dash (Install dash as /bin/sh?) 选择否即可。
附图一:Ubuntu 下设置 dash 界面
相关文章推荐
- Ubuntu 下运行 Shell 脚本时显示 "declare not found" 的问题
- shell脚本在cygwin下运行报错: $'\r': command not found
- Ubuntu学习总结-08 Ubuntu运行Shell脚本报 shell /bin/bash^M: bad interpreter错误问题解决
- ubuntu下shell脚本运行异常:bash和dash的区别
- 在ubuntu下编写运行shell脚本
- 解决Eclipse中运行WordCount出现 java.lang.ClassNotFoundException: org.apache.hadoop.examples.WordCount$TokenizerMapper问题【转】
- 解决部分linux下不能shell脚本失效的解决办法 : not found Bad for loop variable
- ubuntu下shell脚本运行异常:bash和dash的区别
- 朋友的一个问题:Linux开机如何自动运行自己编写好的shell脚本
- 解决Linux下运行Python脚本显示“: 没有那个文件或目录”的问题
- ubuntu下shell脚本运行异常:bash和dash的区别
- 运行shell:windows命令,及显示桌面.scf的问题
- 运行shell:windows命令,及显示桌面.scf的问题
- 最近一个工程出现的问题 以前工程可用的代码到这个工程里也会显示 The following classes could not be found: - ImageView (Change to and
- (参考)ubuntu shell脚本开机自动运行的方法
- 关于在开发板上运行程序显示“-bin/sh:/XXX not found”的解决方法
- windows下编写shell脚本放到linux运行问题
- shell脚本从windows下发送到linux下运行失败的问题
- ubuntu下编写shell脚本运行 启动goagent
- 关于Ubuntu运行shell程序出现问题的解决