从脚本中确定是相当简单的正在运行的代码未在交互式 shell 中运行,但您在编写脚本时已经知道这一点,所以我不确定它除了在函数内(或者如果您获取脚本)之外有什么用处。
在脚本中,如何确定脚本是否正在运行交互式 shell,或者由另一个脚本运行?换句话说,你如何确定交互性呼叫者,召集者剧本的?换句话说,你怎么知道家长shell 是否是交互式的?
只是为了进一步澄清,我并不是想找到最近的交互祖先的名字,我只是想弄清楚如果这即时父母是否互动。
如果这因 shell 不同而不同,那么我对 zsh 最感兴趣,但也对 bash 感兴趣。
答案1
如果脚本以 开头#!/path
,那么内核将启动一个新的不相关的 shell。
如果脚本仅包含 shell 命令,则 shell 会分叉,收到错误ENOEXEC
,将所有标志重置为其默认值,然后分叉的子进程运行该脚本。
因此,除非您可以使用类似于 getppid() 的方法并检查进程表,否则您不能这样做。