微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查是否从shell或其他脚本/应用程序调用了bash脚本

我正在编写一个bash脚本,将另一个命令的输出重定向到正确的位置.基本上,当从shell /命令行调用脚本时,我想将输出发送到STDOUT.但是,当bash脚本从其他应用程序(例如另一个bash脚本,某些应用程序,或者我的Awesome窗口管理器中的awesome-prompt插件)中执行时,我想将输出重定向到其他地方.

在bash中是否有任何方法可以查看脚本是如何被调用的?

尝试这个:
ps -o stat= -p $PPID

如果结果包含“s”(小写),则它可以从命令行运行,也可以从脚本中反向运行.告诉那两者:

ps -o stat= -p $$

如果没有背景,将包含“”.

这是一张桌子:

Run          $$   $PPID
CL           S+    Ss
CL&          S     Ss+
Script       S+    S+
Script&      S     S
Script(&)    S     Ss
Script&(&)   S     NULL

其中(&)表示子脚本背景和&表示运行它的父脚本(这是“脚本”所指的)是后台的. CL表示命令行. NULL表示ps输出null,$PPID为“1”.

来自man ps:

s    is a session leader
   +    is in the foreground process group

应该注意的是,这个答案是基于GNU ps的,但是BSD的手册页(包括OS X)表明了类似的功能. GNU ps是一种包含BSD功能的混合体.

原文地址:https://www.jb51.cc/bash/387193.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐