众所周知,bash 将在 she-bang 行中使用非 bash 解释器执行“脚本”(例如“#! /bin/cat”)
但是,似乎行不通的是(至少第一次尝试时),使用源或点命令将这些自定义解释的脚本包含在适当的 bash 脚本中,例如
#! /bin/bash; echo these are the terms; source terms.cat
terms.cat
解释器是#! /bin/cat
有没有人找到做类似事情的方法(或者确定无法做到?)
(请不要回答我如何解决这个牵强的例子;我知道如何解决;我的实际情况要复杂得多;这个例子只是传达了这个想法)
答案1
该source
命令明确用于加载脚本就好像它们是主脚本的一部分一样。可以将其视为 C#include
或 PHP require()
。
这意味着该文件的内容也必须是有效的 bash 脚本。Bash 既不关心#!
标头,也不要求内核关心它们;它只会直接读取文件并跳过它们,就像它们是常规注释一样。
换句话说,如果您希望 #! 行得到遵守,您的主脚本必须直接将该文件作为命令执行。
(或者告诉perl
执行它。Perl 会尝试提供帮助并为您生成正确的解释器。)