今天同事在打包 deb 时发生了如下错误:

[: y: unexpected operator

脚本代码如下:

read -p " Make Release Version [y/n]:" Y
if [ $Y == 'y' ]
then#...
else#...
fi

同事运行脚本的命令为:

sh test.sh

如果直接运行脚本(“./test.sh”)则不会有这个问题。经过上网查资料,发现是因为脚本解释器不同造成的,整理如下:

ubuntu 中,脚本解释器从系统 6.10 开始默认改为了 dash,而使用 sh 命令执行该脚本就是使用 dash 来执行脚本的。在该解释器中,变量与字符串判断是否相同使用的是一个等号,这就造成了上述问题。解决版本就是使用如下命令:

bash ./test.sh

即:通过指明解释器软件。或者将两个等号改为一个等号亦可。


问题解决之后,搜索了下 sh 命令,原来其已经被软连接至 dash 了,如下:

sh -> dash

所以用 sh 执行脚本就是用 dash 执行脚本,所以会报错。 而直接运行脚本则默认使用了 bash,所以能够执行成功,原因是脚本开头写的代码:

#!/bin/bash

这句代码的含义就是告诉系统,该脚本默认执行的解释器为 bash 。

再扩展下,bash 解释器实际上是 Bourne Again shell,它是 Linux 操作系统缺省的 shell,是Bourne shell 的扩展,简称 Bash 。

Bourne shell 是 UNIX 最初使用的 shell,并且在每种 UNIX 上都可以使用。

总结:

从时间轴上来说,shell 解释器发展历史如下:

Bourne shell

|(增加大量功能)

bash(Bourne Again shell),位置:/bin/bash,使用方法:#! /bin/bash

| (简化功能)

dash(Debian Almquist Shell),位置:/bin/sh,使用方法:#! /bin/sh

(SAW:Game Over!)

ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator相关推荐

  1. linux 上自动执行caffe,linux下caffe的命令运行脚本

    参考:https://www.cnblogs.com/denny402/p/5076285.html 首先编译: make -j8 make pycaffe 注:下面的--solver=.... 等价 ...

  2. ubuntu下面的java一键运行脚本

    java的运行分为编译+执行两部分. 怪麻烦的,所以写个脚本一键运行.如下: ------------------------------------------------------------- ...

  3. 【转】Ubuntu Desktop下自动启动终端并运行脚本

    转自:Ubuntu Desktop下自动启动终端并运行脚本 - 简书 alex@ubuntu19:~# lsb_release -a No LSB modules are available. Dis ...

  4. Ubuntu下将rm命令替换为trash命令

    Ubuntu下将rm命令替换为trash命令 rm命令是一个很可怕的命令,因为它不会给你后悔的机会,删了就是删了,再也找不回来了(据说能在lost+found里面恢复,但是操作难度好像很大,反正新手是 ...

  5. Win10下如何按计划自动运行脚本

    Win10下如何按计划自动运行脚本 通过按计划自动定期运行Python脚本或其他可执行文件,我们可以避免忘记手动运行脚本的烦恼.以下是win10下的具体操作步骤(本教程以Python脚本为例): 点击 ...

  6. 在Ubuntu下构建Bullet以及运行Bullet的例子程序

    在Ubuntu下构建Bullet以及运行Bullet的例子程序 1.找到Bullet的下载页,地址是:https://code.google.com/p/bullet/downloads/list 2 ...

  7. Ubuntu下使用SSH 命令用于登录远程桌面

    Ubuntu下使用SSH 命令用于登录远程桌面 问题描述 工作经常需要在一台电脑(本地主机)上写代码,另一台电脑(服务器,计算力强)上进行训练,两台电脑上都安装的是Ubuntu18.04,为了在loc ...

  8. ubuntu下git 常用命令

    ubuntu下git 常用命令 Git 和代码托管中心 GitHub(外网) Gitee 码云(国内网站) GitLab(局域网) 设置用户签名 git config --global user.na ...

  9. Ubuntu下几个命令行方式使用的图片浏览工具

    想找几个Ubuntu下可以以命令行方式使用的图片浏览工具. Google了一些资料,找到下面几个web: 1.pho:轻巧的命令行图片查看器 其中介绍了工具pho,其功能特点,见下面的转帖内容: ph ...

最新文章

  1. cogs 服务点设置
  2. 开发日记-20190403
  3. 大话数据结构:平衡二叉排序树
  4. 2017新生儿爆款名字出炉!90后的父母们最受欢迎的居然是.....
  5. STM32项目(五)——智能回收箱
  6. Laravel源码学习文章汇总
  7. LogBack 日志等级设置无效,原因竟然是因为这个?!
  8. 模拟银行转账(java+mysql+tomcat +JDBC+ druid连接池 + Servlet + Ajax)
  9. ADI官方提供的源码AD9361+ZC706 利用TCL构建Vivado工程,利用no-OS-master搭建SDK工程
  10. 【电子商务安全与支付实验】数字证书的申请及使用
  11. 一步一步建立自己的神经网络
  12. hibernate创建配置遇到问题:!-- https://mvnrepository.com/artifact/javassist/javassist -- dependency
  13. keytool运行错误
  14. Linux ping www.baidu.com 不通解决办法
  15. Excel计算年龄(足岁)问题:Excel中datedif和VBA中的datediff函数介绍
  16. 信号完整性之Ansys SIwave_S参数提取(四)
  17. 再也不见,雅虎被中国市场击败
  18. 反向代理和正向代理以及Nginx工具的简要使用
  19. 2014创新工场校园招聘笔试题(9.16北京)
  20. 全国DAMA-CDGA/CDGP数据治理认证怎么样?

热门文章

  1. java-数据结构-续
  2. java多线程(同步和死锁,生产者和消费者问题)
  3. 【转】POJ-2104(K-th Number 划分树)
  4. 1047. 删除字符串中的所有相邻重复项
  5. win7讲述人安装包_文件夹选项与讲述人
  6. 【网址收藏】Ubuntu使用OBS录制桌面时黑屏怎么办?
  7. win11安装chocolatey软件包管理工具(win版)
  8. Linux centos openshift安装教程整理
  9. go切片的定义及make使用
  10. python3操作MySQL:查询