Patrick Böker Asked: 2024-03-16 05:45:55 +0800 CST2024-03-16 05:45:55 +0800 CST 2024-03-16 05:45:55 +0800 CST POSIX Shell:更改了 arg0 的 `exec` 772 我想要exec一个程序并控制它的参数,包括 arg0 和环境。使用 CI 可以实现execve. 我可以在 POSIX shell 中执行此操作吗? shell 1 个回答 Voted Best Answer MC68020 2024-03-16T06:39:37+08:002024-03-16T06:39:37+08:00 根据Specialbuiltin Utilities的 POSIX 文档, exec 的语法是 exec [command [argument...]] 调用 shell 的环境应该传播到命令,因此在 exec-ing 之前设置它foo=bar exec cmd应该可以工作。但是,您可能需要考虑基本原理段落。 大多数历史实现都不一致: foo=bar exec cmd 没有将 foo 传递给 cmd。 也没有内置的方法来修改 argv[0]。 一个可能的解决方法可能包括将some_name 符号链接到命令之前exec some_name(完全归功于muru) 请注意,bash zsh和ksh确实支持 exec 命令的扩展实现: exec [-cl] [-a name] [command [arguments]] 由于 -a 选项,这使得name可以作为argv[0] with -a argv0 设置执行命令的argv[0]字符串 然而,csh、dash和fish都不支持这一点。
根据Specialbuiltin Utilities的 POSIX 文档, exec 的语法是
调用 shell 的环境应该传播到命令,因此在 exec-ing 之前设置它
foo=bar exec cmd
应该可以工作。但是,您可能需要考虑基本原理段落。也没有内置的方法来修改 argv[0]。
一个可能的解决方法可能包括将some_name 符号链接到命令之前
exec some_name
(完全归功于muru)请注意,bash zsh和ksh确实支持 exec 命令的扩展实现:
由于 -a 选项,这使得name可以作为
argv[0]
然而,csh、dash和fish都不支持这一点。