检查是否从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功能的混合体.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...