我正在编写一个 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 功能等的混合体。
关于bash - 检查是否从 shell 或其他脚本/应用程序调用了 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4261876/