Fork me on GitHub

Shell 脚本第一行解释

第一行写法

  #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell

1.#!/usr/bin/env bash 或者 #!/usr/bin/bash
  通过#!/usr/bin/env bash 运行程序,会根据你的环境寻找并运行默认的版本,提供灵活性。用户不需要去寻找程序在系统中的位置(因为在不同的系统,命令或程序存放的位置可能不同),只要程序在你的$PATH中;
  不好的地方是,有可能在一个多用户的系统中,别人在你的$PATH中放置了一个bash,可能出现错误。
  大部分情况下,#!/usr/bin/env bash是优先选择的,因为它提供了灵活性,特别是你想在不同的版本下运行这个脚本;

  而指定具体位置的方式#!/usr/bin/bash,在某些情况下更安全,因为它限制了代码注入的可能。

2.#!/usr/bin/env bash 或者 #!/bin/bash
  两者没有本质区别,
  #!/bin/bash更常见,
  #!/usr/bin/env bash在不同系统上的移植性更好,因为它会从用户定义的PATH中寻找bash解释器。IDEA默认生成

如何执行

1.作为可执行程序

1
2
$ chmod +x ./test.sh #使脚本具有执行权限
$ ./test.sh #执行脚本

  注意,一定要写成 ./test.sh,而不是 test.sh
  linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

2.作为解释器参数
  sh test.sh 这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用

-----------------本文结束,感谢您的阅读-----------------