zoukankan      html  css  js  c++  java
  • Linux跑脚本用sh和./有什么区别?(转)

      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 2: syntax error near unexpected token `"This is Python Script"'
    a.run: line 2: `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的内置命令、语法等有些不一样。
    ----------------------------------------------------补充一下----------------------------------------------------
    我的测试环境是cantos 6.4
    [feishu@localhost tmp]$ ls -al `which sh`
    lrwxrwxrwx. 1 root root 4 11月 23 20:41 /bin/sh -> bash
    [feishu@localhost ~]$ echo $SHELL
    /bin/bash
    
    可以看到 sh其实就是bash,那么在这个发行版中,你如果你写的是一个shell脚本,而且脚本第一行没申明shell解释器,那么使用./a.sh和sh a.sh并没有什么区别
     
  • 相关阅读:
    Ubuntu 18.04安装gcc、g++ 4.8
    Java 接口返回值集合防止空指针
    Linux CentOS7.9环境下搭建Java Web 环境
    Springboot集成UReport2
    linux 环境中 单独执行 python 脚本
    sql 注入的问题
    检验上传文件的大小
    Gunicorn使用讲解
    CentOS下安装部署对象存储服务MinIO
    阿里云CentOS7安装MySQL
  • 原文地址:https://www.cnblogs.com/leanfish/p/9956516.html
Copyright © 2011-2022 走看看