![声明我自己的脚本来执行文件](https://linux22.com/image/538982/%E5%A3%B0%E6%98%8E%E6%88%91%E8%87%AA%E5%B7%B1%E7%9A%84%E8%84%9A%E6%9C%AC%E6%9D%A5%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6.png)
我有两个文件,第一个是“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