声明我自己的脚本来执行文件

声明我自己的脚本来执行文件

我有两个文件,第一个是“ax”:

#!/usr/bin/env zsh

print "Params: $*"
cat $*

还有一个'tst':

#! /home/me/ax
A
B
C

当我在 sh/csh/bash shell 中时:

> ./tst
./tst: line 2: A: command not found
./tst: line 3: B: command not found
./tst: line 4: C: command not found

当我在 zsh shell 中时:

Params: ./tst
#! /IW/users-home/e640846/ax
A
B
C

是否存在一种标准方法可以让我在 zsh shell 中获得的行为在其他 shell 中实现?

精度:-bash 版本:3.00.15-(1)版本(x86_64-redhat-linux-gnu)

谢谢

答案1

解释脚本不能让解释器反过来成为另一个脚本,因此内核 exec*() 会失败并出现 ENOEXEC。

此时,POSIX 要求 shell 自己解释脚本。SUSv3,“命令搜索和执行”,1.dib 第二段。

但 zsh 不是 POSIX shell。相反,zsh 会查看该#!行并尝试自己运行它,将原始脚本作为参数传递给它。这就是这里发生的情况——您未能成功使用ax作为 的解释器来tst处理 的内容;您只是将其作为参数tst传递给。tstax

相关内容