【问题标题】:Check if script was started in current shell [duplicate]检查脚本是否在当前shell中启动[重复]
【发布时间】:2014-05-25 04:38:48
【问题描述】:

有没有办法在 shell 脚本 (ksh) 中检查脚本是否在当前 shell 中启动?

示例

使用. (dot/source) 命令在当前 shell 中启动脚本

$ . ./myscript
$ I run in the current environment!


在自己的进程中启动脚本

$ ./myscript
$ I run in my own process!

【问题讨论】:

  • @tripleee 你提到的帖子代表 bash ksh,而这篇帖子似乎特定于 ksh。
  • 这里使用的 korn shell 的确切版本非常相关。

标签: shell unix ksh


【解决方案1】:

这是一个你可以使用的简单技巧。

#!/bin/ksh
if [ ${.sh.file} != ${0} ]; then
    echo I run in the current environment
else
    echo I run in my own process
fi

【讨论】:

  • ${.sh.file} 导致我这边出现错误消息bad substitution
  • @TechnoCore - 我意识到你可能没有使用 GNU ksh。您只需将.sh.file 替换为_。然后声明将是if [ ${_} != ${0} ]; then
【解决方案2】:

每个 Shell 都有自己的 PID ..

所以你可以在你的脚本中使用 echo "$$" ..它将帮助我们找到脚本是从哪里运行的。

即 pid 的差异意味着它们是从不同的 shell 运行的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 2015-09-02
    • 2012-11-14
    • 1970-01-01
    • 2018-06-14
    • 2014-10-31
    • 2014-03-30
    • 1970-01-01
    相关资源
    最近更新 更多