【问题标题】:Running a script according to shebang line根据shebang行运行脚本
【发布时间】:2014-12-14 16:44:57
【问题描述】:

我的计算机上有一个名为test.py 的脚本。到目前为止,我一直在做的是在终端中输入python test.py

在 Unix 操作系统上是否有一个命令不需要用户指定他/她用来运行脚本的程序,而是使用 shebang 行指向的任何程序来运行脚本?

例如,我正在寻找可以让我在终端中键入some_command test.txt 的命令,如果test.txt 的第一行是#!/usr/bin/python,则该脚本将被解释为python 脚本,但是如果第一行是#!/path/to/javascript/interpreter,脚本将被解释为javascript。

【问题讨论】:

  • 你能分享你的用例为什么你需要这样的东西吗?

标签: unix shebang


【解决方案1】:

这是终端的默认行为(或者通常只是执行一个文件),您所要做的就是使脚本可执行

chmod u+x test.txt

然后(假设text.txt 在您的当前目录中)每次键入时

./text.txt

它将查看 sh-bang 行并使用那里的程序运行text.txt

【讨论】:

  • 完全不涉及终端。甚至 shell 也只是通过 exec* 系统调用之一将文件传递给内核。
  • @tripleee 我知道,但由于 OP 不知道 sh-bang 线,我做出判断,最好根据他们将观察到的内容来描述它,而不是它实际上是如何工作的。如果 OP 展示了更多使用 unix 的经验,我会用execve 来描述它以获得最准确的答案。
【解决方案2】:

如果你真的想复制内置功能,试试这个。

#!/bin/sh
x=$1
shift
p=$(sed -n 's/^#!//p;q' "$x" | grep .) && exec $p "$@"
exec "$x" "$@"
echo "$0: $x: No can do" >&2

也许叫它start 来提醒你同样有用的 Windows 命令。

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多