tca*_*hin 10 command-line scripts
如何确定脚本是从命令行调用还是通过双击文件管理器 (Nautilis) 调用?
如果是前者,我在脚本完成时仍然有一个命令提示符,但如果它被双击(或通过 .desktop 文件执行),脚本将在一个窗口中执行,然后消失。我希望窗口在命令提示符下保持打开状态。
我认为脚本可以进行此检查,并且不执行任何操作(如果从命令行调用),或者exec如果通过双击或 .desktop 调用,则最后执行 bash。
没有成功使用方法来检查是否交互或 tty。
您可以检查父进程是否为 shell。例如:
#! /bin/bash
if [[ $(readlink -f /proc/$(ps -o ppid:1= -p $$)/exe) != $(readlink -f "$SHELL") ]]
then
echo "Starting the shell..."
exec "$SHELL"
else
echo "Not starting a shell."
fi
Run Code Online (Sandbox Code Playgroud)
ps -o ppid:1= -p $$打印ppid当前进程 ( -p $$)的父进程 ( )的 PID 。A readlinkon/proc/<pid>/exe应该打印可执行文件的路径,如果您在 shell 中运行它,它将是 shell,或者其他方式。
另一种可能性是该SHLVL变量,其指示如何嵌套的壳实例是当前。如果在 shell 中运行,脚本应该有SHLVL2 个或更多。当通过双击或从桌面启动器运行时,它应该是 1:
#! /bin/bash
if (( SHLVL > 1 ))
then
echo "Starting the shell..."
exec "$SHELL"
else
echo "Not starting a shell."
fi
Run Code Online (Sandbox Code Playgroud)