我的脚本设置一些环境变量,以便由Makefile使用。由于每个shell(bash通过export来设置变量,tcsh则是setenv),我需要获取正确的shell类型,从我们运行Python的位置获取。我尝试过使用$SHELL变量,但它总是将sh作为我的shell。
有没有办法从Python脚本中获取正确的shell类型,或者它总是输出"$SHELL"变量作为"SH"?
很抱歉又翻出了这个问题,但我刚刚自己解决了它。 以下内容将为您提供当前shell的路径:
from os import environ
print(environ['SHELL'])
你应该能够用任何你正在寻找的环境变量替换shell。
如果用户在登录shell之外启动了不同类型的shell,然后在该shell中调用您的Python脚本,您需要查看用于运行脚本父进程的可执行文件:
import os
os.path.realpath(f'/proc/{os.getppid()}/exe')
使用以下方式使用shellingham
import shellingham
try:
shell = shellingham.detect_shell()
except shellingham.ShellDetectionFailure:
shell = provide_default()
shell
会返回一个包含两个参数的元组,你可以通过 shell[0]
读取你的 shell 名称。
subprocess.*
函数有环境变量的参数! - ThiefMaster$SHELL
给出的是登录 shell,而不是当前 shell。为什么不在 Makefile 中指定一个特定的 shell,或者使用#!
呢? - cdarke