gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:49:48 25 4
gpt4 key购买 nike

我正在编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com