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 一起使用。