我有两个文件,第一个是“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
传递给。tst
ax