一个很有意思的例子:

  sh是一个shell。运行sh a.sh,表示我使用sh来解释这个脚本;如果我直接运行./a.sh,首先你会查找脚本第一行是否指定了解释器,如果没指定,那么就用当前系统默认的shell(大多数linux默认是bash),如果指定了解释器,那么就将该脚本交给指定的解释器.

比如a.run文件内容是这个:

#!/usr/bin/python
print("This is Python script")

  那么你如果运行./a.run,结果就是输出一行文字,但是如果你运行sh a.run,会报错

[feishu@localhost tmp]$ ./a.run
This is Python Script
[feishu@localhost tmp]$ sh a.run
a.run: line : syntax error near unexpected token `"This is Python Script"'
a.run: line : `print("This is Python Script")'

  因为这是一个python脚本,sh看不懂(注意,linux下后缀通常不是很严格,.run后缀是随意命名的).
  你是写了一个shell脚本,想问./a.sh和sh a.sh区别,这个要看你系统默认shell和脚本了,如果你写的是一个sh ( Bourne shell )脚本而且第一行申明了解释器为sh,那么没区别,但是如果你写的是一个bash(Bourne Again SHell) 脚本,那结果就可能有区别了,因为bash和sh的内置命令、语法等有些不一样。
----------------------------------------------------补充一下----------------------------------------------------
  我的测试环境是redhat 7.4

[root@localhost ~]# ls -al `which sh`
lrwxrwxrwx. root root 6月 /usr/bin/sh -> bash [feishu@localhost ~]$ echo $SHELL
/bin/bash

  可以看到 sh其实就是bash,那么在这个发行版中,你如果你写的是一个shell脚本,而且脚本第一行没申明shell解释器,那么使用./a.sh和sh a.sh并没有什么区别

  本文转自:https://www.cnblogs.com/leanfish/p/9956516.html

Linux跑脚本用sh和./有什么区别?的更多相关文章

  1. Linux跑脚本用sh和./有什么区别?(转)

    sh是一个shell.运行sh a.sh,表示我使用sh来解释这个脚本:如果我直接运行./a.sh,首先你会查找脚本第一行是否指定了解释器,如果没指定,那么就用当前系统默认的shell(大多数linu ...

  2. linux source命令与sh shell scripts的区别

    source FileName 作用:在当前bash环境下读取并执行FileName中的命令. 注:该命令通常用命令“.”来替代. 如:source .bash_rc 与 . .bash_rc 是等效 ...

  3. linux服务器监控流量sh脚本

    服务器可能经常遇到服务器出带宽跑满,不知如何查询被哪个进程占用的情况,有一款开源的英文软件iftop功能比较强大可以查询相关信息,可能刚接触linux系统的朋友不太会使用,在此写了一个功能比较简单无需 ...

  4. freescale-sdk linux移植一搭建编译环境脚本host-prepare.sh分析

    接下来使用自己的课外歇息时间,对基于PowerPC架构freescale-sdk,进行linux移植和分析.主要參考官方文档freescale linux sdk START_HERE.html,首先 ...

  5. Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)

    本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行. 默认前提:另外一个系统和本系统是同一个系统版本. 1,编写导出依赖包的脚本copylib.sh #!/bin/bash LibDir=$P ...

  6. linux shell 脚本 历史文件清理脚本,按天,按月,清理前N天的历史文件,删除指定大小历史文件,历史文件归档清理

    不知道大家那有没有要清理的这个事情.需要清理目录历史文件.可能后续也会有很多其他地方需要清理历史文件,可能会用到. 我这两天空闲写了个脚本,清理比较方便,有要进行清理的大量历史文件的话可以用. 脚本用 ...

  7. Linux一键脚本合集vps

    首先,想说说一键脚本流行的原因何在? 众所周知的是,Linux 是占据大半壁江山的服务器系统,但在桌面上的占有率可就远不是那么回事儿了,使用和熟悉 Linux 的人远没有 Windows 多,但又因为 ...

  8. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  9. Tomcat重启脚本restart.sh停止脚本stop.sh

    Tomcat重启脚本restart.sh停止脚本stop.sh Tomcat本身提供了 startup.sh(启动)shutdown.sh(关闭)脚本,我们在部署中经常会出现死进程形象,无法杀掉进程需 ...

随机推荐

  1. javascript下載csv檔案

    參考自: https://dotblogs.com.tw/shihgogo/2017/05/31/090831 function createCsvFile(){ var fileName = &qu ...

  2. [分享会] 微服务框架设计 (基于Swoole)

    框架三要素 1. Service 通信 2. 服务管理 3. 开发组件   为什么需要服务 1.自治性 2.可组合 3.异构性 2.弹性扩展   -实现方式-   共享库 1.二进制文件/Compos ...

  3. OSI七层与TCP/IP四层(小结)

    OSI 七层模型 我们一般使用的网络数据传输由下而上共有七层,分别为物理层.数据链路层.网络层.传输层.会话层.表示层.应用层,也被依次称为 OSI 第一层.第二层.⋯⋯. 第七层. 各层功能简介 1 ...

  4. Git如何切换账户

    如果你不知道现在本地Git用的帐号是什么,你可以输入 git config user.name         查看用户名 git config user.email         查看用户邮箱 修 ...

  5. windows SDK中的wininet写http客户端

    BOOL InternetSetOption( _In_  HINTERNET hInternet, _In_  DWORD dwOption, _In_  LPVOID lpBuffer, _In_ ...

  6. javascript两种循环写法

    var i=0,len=cars.length; for (; i<len; ) { document.write(cars[i] + "<br>"); i++; ...

  7. day48——css样式

    day48 通过调试窗口还可以玩一个神奇的东西 document.body.contentEditable=true css样式 高度宽度 width宽度 height高度 块级标签能设置高度宽度,内 ...

  8. golang 堆排序

    堆排序的思想  因为堆的形式是完全二叉树,跟数组的索引形成映射,可以使用数组保存.先构建最大(小)堆,根结点就是最大(小)值,删除根结点之后的节点重新构建堆,依此顺序,即可完成堆排序. 代码实现 pa ...

  9. Wampserver图标黄色解决

    本文章是参考了该网址https://jingyan.baidu.com/article/48b37f8d0a02811a6564887b.html 安装了Wampserver后,并对httped.co ...

  10. Docker 使用入门 Hello World

    结合上一篇的所说的内容:现在安装好了Docker 安装好了就要用嘛,所以,先走一个Hello World docker run ubuntu:15.10 /bin/echo "hello w ...