![bash 可以“获取”自定义解释器 shell 吗?](https://linux22.com/image/1531800/bash%20%E5%8F%AF%E4%BB%A5%E2%80%9C%E8%8E%B7%E5%8F%96%E2%80%9D%E8%87%AA%E5%AE%9A%E4%B9%89%E8%A7%A3%E9%87%8A%E5%99%A8%20shell%20%E5%90%97%EF%BC%9F.png)
众所周知,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 会尝试提供帮助并为您生成正确的解释器。)