【问题标题】:Getting the current shell type from python script从 python 脚本获取当前的 shell 类型
【发布时间】:2014-01-20 07:41:38
【问题描述】:

我的脚本设置了一些环境变量,供 Makefiles 使用,所以由于每个 shell、bash(export to set varriable) 和 tcsh(setenv),我都需要从我们运行的地方获取正确的 shell 类型python,我尝试过使用 $SHELL varrriable,但它总是给我 sh 作为我的 shell。

有没有办法,我可以从 python 脚本中获取正确的 shell 类型,或者它总是输出“SH”作为 $SHELL 变量。

【问题讨论】:

  • 为什么需要外壳? subprocess.* 函数有环境变量的参数!
  • $SHELL 为您提供登录 shell,而不是当前 shell。为什么不在 Makefile 中指定特定的 shell,或者使用#!
  • 我需要这个,因为不同的用户可以有不同的 shell 偏好,脚本应该检测用户从哪个 shell 调用它,然后基于此,它应该输出正确的数据变量( setenv/export) 为它。

标签: python bash shell


【解决方案1】:

很抱歉让这个死而复生,但我只是自己做的。 以下内容应为您提供当前 shell 的路径:

from os import environ
print(environ['SHELL'])

您应该能够将 shell 替换为您正在寻找的任何环境变量。

【讨论】:

  • 不起作用:我的shell设置为fish,当我在fish中启动bash时,shell仍然设置为fish,它永远不会更改为bash,不是exec bash,不是bash -c "env | grep SHELL" 或其他我能想到的东西
  • 你配置的shell仍然是鱼。这使用的环境变量方法不会检测到您进入 Bash 进程来执行 python,这不是它的设计。如果你想要一个父进程,我应该认为你可以以某种方式使用子进程来做到这一点。但是这里的用例是什么?这似乎是人为制造的问题。
  • 有很多理由让您想知道什么 shell 称为 python 脚本。例如当您编写了一个 python 脚本来输出当前 shell 的 shell 命令时,如问题中所示。当我需要生成用于调用 python 的当前 shell 的输出时,配置的 shell 是什么并不重要。
  • 在 .bashrc 中的环境变量、别名等可能与在 config.fish 或 .cshrc 中不同。您也可以通过启动不同的 shell 在后台简单地运行不同的脚本。例如,在使用默认系统 shell 时:运行 python 使用系统 python(在我的情况下为 2.6),而更改运行 python 的 shell 将运行最新的 python(3.7)并访问非默认库等。
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
相关资源
最近更新 更多