我有以下关于 UNIX 的问题:
当顶线消失时还需要什么
Run Code Online (Sandbox Code Playgroud)#!\bin\awk -fRun Code Online (Sandbox Code Playgroud)to make it run as a command?
我在想,无论脚本的名称是什么,都需要使用 chmod 授予权限才能运行。
让我们假设shebang 序列包含在一个单独的文件中编写的脚本中;例如,我创建了一个example.sh脚本文件。
如果我在文件中添加shebang序列:
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
我如何确定上面的命令未被识别为注释(在 Linux Bash 脚本中,#通常被视为注释的开始。
来自关于shebang的bash手册
大多数版本的 Unix 都将此作为操作系统命令执行机制的一部分。如果脚本的第一行以两个字符“#!”开头,则该行的其余部分指定程序的解释器。因此,您可以指定 Bash、awk、Perl 或其他一些解释器,并用该语言编写脚本文件的其余部分。
解释器的参数由脚本文件第一行的解释器名称后面的单个可选参数组成,后跟脚本文件的名称,然后 是其余参数。Bash 将在自己不处理它的操作系统上执行此操作。请注意,某些较旧版本的 Unix 将解释器名称和参数限制为最多 32 个字符。
“可选参数”是指选项的参数,还是可能存在或不存在的参数?
为什么是“单个可选参数”?它不允许多个“可选参数”吗?
如果脚本看起来像
#! /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2
...
Run Code Online (Sandbox Code Playgroud)
当我在 bash 中运行脚本时
$ myscript arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)
在 bash 中执行的实际命令是什么?是吗
$ /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2 myscript arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)
谢谢。
在 bash 脚本的顶部eu之后是什么意思#!/bin/bash -eu?
通常我用这个hashbang/shebang开始我的 bash 脚本:
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
但我只是遇到了一个
#!/bin/bash -eu
Run Code Online (Sandbox Code Playgroud)
我不知道为什么有一个-eu那里。阅读这些man bash页面似乎对我没有帮助,但也许我忽略了一些东西。
不是重复的:
这不是使用 `set -eu` 时 EXIT 和 ERR 陷阱的正确行为的重复。
在这个问题下面的评论中引用@ilkkachu,直接解决这个问题:
... -e 和 -u 如何处理陷阱或其他任何东西与它们和其他单字符选项在命令行上的给出方式完全无关。
我同意这一点。这些是不同的问题和答案,背后有着不同的动机。这个问题是如此不同,我什至在尝试理解我自己的问题的答案时,都不会想通过查看它的标题或描述来点击它,而且答案也大不相同。