shell脚本第一行写的是什么?那是什么意思?如果我不写那行会发生什么?那么如何运行脚本呢?

shell脚本第一行写的是什么?那是什么意思?如果我不写那行会发生什么?那么如何运行脚本呢?

shell脚本中第一行写的是什么意思是什么如果我没有写那行会发生什么然后如何运行脚本

答案1

第一行(称为 shebang)告诉应该使用哪种解释器来执行该文件。 Steeldriver 标记为“相关”的答案将更详细地告诉您会发生什么。

所以,如果你从

 #!/bin/bash

bash用于解释该文件。其他常见的启动器是#!/usr/bin/perl#!/usr/bin/python。但不限于此;如果你创建一个tst文件

#!/usr/bin/vi
jantje zag eens pruimen hangen
oh als eieren zo groot

,使该可执行文件(chmod +x tst)并执行它(./tst),它将启动 vi 编辑该文件。

问题的下一部分是,如果第一行没有 shebang 会发生什么。答案是,将使用当前使用的解释器。作为演示:创建一个文件tst

ps -f

(没有 shebang,只有一行),使该可执行文件 ( chmod +x tst) 并执行它 ( ./tst)。结果将类似于:

ljm@phi:~$ ./tst
UID        PID  PPID  C STIME TTY          TIME CMD
ljm       1379  1377  0 Oct06 pts/3    00:00:00 -bash
ljm      20769  1379  0 10:34 pts/3    00:00:00 -bash
ljm      20770 20769  0 10:34 pts/3    00:00:00 ps -f

(1379 是我当前的 shell,20769 是用于解释的 bash tst,因此它是 ps 的父级(PPID))

如果我启动 ash并再次执行tst,我会看到以下内容:

ljm@phi:~$ sh
$ ./tst   
UID        PID  PPID  C STIME TTY          TIME CMD
ljm       1379  1377  0 Oct06 pts/3    00:00:00 -bash
ljm      20773  1379  0 10:34 pts/3    00:00:00 sh
ljm      20774 20773  0 10:34 pts/3    00:00:00 /bin/sh ./tst
ljm      20775 20774  0 10:34 pts/3    00:00:00 ps -f
$ 

所以现在,sh用来解释tst

答案2

那么如何在没有shebang的情况下运行脚本呢?

通过将其作为文件(例如 tst)获取,甚至是不可执行的:

source tst
. tst

(这些是 buitins -> help source

或者

bash tst

这类似于

bash -c 'string of commands aka script'

语言解释器和“命令流”的这种匹配也以不同的方式与 perl、sed 和 awk 一起使用。

相关内容