我看到SHELL
环境变量有两种可能的用途:
/bin/sh -c "..."
惯用语中的命令。如果只用于前者,可能会很奇怪(例如ipython
),如果它也用于后者,则需要提供POSIX兼容性的基本形式,例如理解-c
参数并保持环境完整(这是令人惊讶的棘手)。
该POSIX标准也不是很明确的在这里,它只是写道。
该变量应代表用户首选命令语言解释器的路径名。如果此解释器不符合 IEEE Std 1003.1-2001 第 2 章 Shell 命令语言的 Shell 和实用程序卷中的 Shell 命令语言,实用程序的行为可能与 IEEE Std 1003.1-2001 中描述的不同。
第二次使用是否真的常见和/或有效,因此如果我设置SHELL
为奇怪的东西需要担心?
没有一个 POSIX C APISHELL
明确使用环境变量。在system
和popen
函数必须调用一个叫做程序sh
。一些实用程序(例如ex
, mailx
, ...)必须使用$SHELL
, 但始终执行用户提供的代码;make
明确忽略$SHELL
.
如果不符合 POSIX sh ,环境变量部分允许实用程序,但不允许 C API(“系统接口”)具有不同的行为$SHELL
。
在实践中,SHELL
设置为用户的登录 shell,它可能与 POSIX 兼容,也可能不兼容。Zsh和fish是流行的替代品。我已经在各种 Unix 变体上使用 zsh 十年了,我不记得任何系统实用程序失败。我见过偶尔草率编写的代码调用$SHELL
而不是sh
执行 sh 脚本。这是非常罕见的,不需要阻止您设置SHELL
为您喜欢的任何内容。
简而言之,是的,SHELL
是您最喜欢的交互式 shell,并且应用程序无法保证它接受什么语法,甚至它是否接受-c
选项。
归档时间: |
|
查看次数: |
576 次 |
最近记录: |