zoukankan      html  css  js  c++  java
  • 从#!/bin/bash中想到的...

      罪过罪过,开发了N年的SHELL,竟然第一次思考#!/bin/bash是啥意思?真是怀疑以前的的代码是咋开发出来的~

      如果要解释#!/bin/bash是啥意思?为啥每个SHELL脚本第一行都写它哪?首先要了解什么是SHELL解释器?

    一、SHELL解释器

      SHELL解释器是一个程序,是一个C语言写的程序。当我们登录LINUX服务器的时候,我们就开始使用一个解释器程序,一般是/bin/bash,当然也可能是/bin/sh。当我们执行man shell,就会输出具体的作用。

    Bash  is  an  sh-compatible  command language interpreter that executes commands read from the standard input or from a file.
    二把刀翻译:bash是一个从标准输入或者文件输入的命令解释器

    二、解释器的作用

      这个非常容易理解,当我们登录服务器,然后显示:

    [qiu.li@l-tdata1.tkt.cn6 ~]$ 

      说明已经在bash的里面了,当咱们输入:echo "hello liqiu!",这说明是告诉解释器,输出:“hello liqiu!”

    三、#!/bin/bash

      明白了上面的东东,就很容易理解咱们开发的SHELL代码,为什么第一行要输入#!/bin/bash了吧,就是要告诉系统,此脚本使用/bin/bash来执行!

      那么下面大家可能就想了,能换成别的吗?能不放在第一行吗?

    1、能换成别的吗?

      答案是肯定的,可以换成别的,比如:“/bin/sh”或者“/bin/awk”。

      那么/bin/bash和/bin/sh有啥区别哪?先说共同点,都是脚本语言,并且很多系统都是把sh软连接到bash。区别吗,sh是bash的一个子集

    2、能不放在第一行吗?

      不行,只有第一行生效,后面的全部当成注释处理。最后加上一点说明,每个脚本开头都使用"#!",#!实际上是一个2字节魔法数字,这是指定一个文件类型的特殊标记,在这种情况下,指的就是一个可执行的脚本。在#!之后,接一个路径名,这个路径名指定了一个解释脚本命令的程序,这个程序可以是shell,程序语言或者任意一个通用程序。

  • 相关阅读:
    PostMessage
    __stdcall
    C++中L和_T()之区别
    号外:百度开源了它的人工智能技术
    最棒的Unity Github 项目收集(2016)
    OpenGL学习笔记——求值器和NURBS
    unity3d四元数和旋转矩阵
    C# System.Timers.Time
    进程地址空间分布
    子进程与父进程
  • 原文地址:https://www.cnblogs.com/liqiu/p/4107948.html
Copyright © 2011-2022 走看看