自定义Bash提示并将修改应用于所有登录的用户

热点

我有一个带有动态IP地址的Linux。我想根据当前IP更改bash提示。python脚本负责此连接,并在启动时启动。

os.system('export PS1="\u@'+str(self.ip)+'>"')

该命令已执行,但这不会在python进程的环境块之外进行任何修改:并非所有已登录用户或将来将登录的用户。

当时的想法是为每个用户或/ etc / bashrc更改.bashrc。它将解决新连接的问题,但不能解决打开的问题。

用户名

这不会在python进程的环境块之外修改任何内容

它甚至没有做到这一点。它修改了/bin/sh -c "export..."system()调用的子进程的环境块,并且修改立即丢失-它们也不会“向上”传播到Python进程。(检查os.environ["PS1"]是否有疑问。实际上,为什么不直接设置os.environ?)

(此外,Bash有一组单独的“ shell变量”。两者之间存在很大的重叠-环境变量是在shell启动时导入的,并且可以将shell变量标记为导出到子环境中-但是关键是,即使您从外部更新Bash的环境块,则实际上不会更新Bash实际使用shell变量$ PS1。)

也就是说,“从外部”(实际上是唯一的方法)更新流程环境的一个常见技巧是将调试器附加到流程并调用相应的函数来修改环境,如程序本身所示:

$ gdb -p <pid> 
(gdb) p(int)putenv(“ FOO = bar”)
$ 0 = 0 (gdb) p(char *)getenv(“ FOO”)
$ 1 = 0x55bb09f61404“ bar”

这实际上将与PS1一起使用,因为Bash带有其自己的getenv()和putenv()实现,从而覆盖了常规的libc版本。该自定义实现实际上并没有更新environ,而是更新了相应的shell变量。putenv("PS1=foo")因此,通过调试器进行调用将更新Shell提示符。

坦率地说,这是对实际问题的可怕解决方案。如果希望shell提示符始终显示当前IP地址,只需使提示符本身检查正确的值是什么即可。

Bash允许您包括诸如$ PS1之类的文字扩展,$var甚至$(cmd)在$ PS1之内,并且它们会在每次显示提示时进行扩展。例如(请注意\$被逃脱):

$ PS1="<now=\$(date +%X)> " ↵
<now=03:27:02 PM> ↵
<now=03:27:04 PM> ↵
<now=03:27:07 PM> ↵
<now=03:27:08 PM> ↵

因此,为了将其应用于您的“ IP更新器”脚本,

  1. 无需尝试更改所有环境,只需使脚本将IP地址写出到文件中即可(例如,/tmp/current-ip)。

  2. 使用$(< filename)扩展名,使您的shell提示从该文件中读取

    PS1="@\$(</tmp/current-ip)>"
    

就是这样。您无需遍历所有环境模块即可–每次下次需要显示提示时,每个shell都会自动重新读取文件。例如:

$ echo 1.1.1.1> / tmp / current-ip↵
 $ PS1 =“ @ \ $(</ tmp / current-ip)>”↵
 @ 1.1.1.1>@ 1.1.1.1> echo 22.22.22.22> / tmp / current-
 ip↵@ 22.22.22.22>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Formik - “脏”被应用于具有相同自定义组件的所有实例

来自分类Dev

将不同的属性应用于所有方法的自定义类属性

来自分类Dev

将自定义样式应用于页面上的所有按钮

来自分类Dev

将不同的属性应用于所有方法的自定义类属性

来自分类Dev

jQuery自定义插件更改已应用于所有实例

来自分类Dev

如何使自定义 ModelBinder 自动应用于某种类型的所有属性

来自分类Dev

将本地组策略对象应用于自定义用户组

来自分类Dev

将自定义主题应用于Odoo应用

来自分类Dev

React Native:如何将自定义函数应用于对象数组,并在Javascript中返回带有附加字段的修改后的数组?

来自分类Dev

在哪里为所有现有和新用户提供自定义提示?

来自分类Dev

将自定义函数应用于具有通用名称的任何数据集

来自分类Dev

AngularJs有条件地将自定义指令应用于HTML

来自分类Dev

HTML / CSS如何将CSS应用于具有自定义数据属性的“ a”?

来自分类Dev

HTML / CSS如何将CSS应用于具有自定义数据属性的“ a”?

来自分类Dev

将自定义样式应用于微调器

来自分类Dev

无法将自定义listSelector应用于ListView

来自分类Dev

将自定义函数应用于数据框

来自分类Dev

熊猫滚动应用于自定义功能

来自分类Dev

将自定义功能应用于熊猫df

来自分类Dev

将自定义累积功能应用于熊猫

来自分类Dev

将自定义累积功能应用于熊猫

来自分类Dev

如何清除应用于元素的自定义样式?

来自分类Dev

将语义应用于自定义 git 流

来自分类Dev

获取所有行并将总和应用于列

来自分类Dev

获取所有行并将总和应用于列

来自分类Dev

如何将自定义渲染应用于除Symfony 2.1项目中的某些字段类型以外的所有表单字段

来自分类Dev

试图隐藏/显示一个 div 但是 .slideToggle() 应用于页面上的所有 div - 高级自定义字段中继器

来自分类Dev

如何修改OU中所有用户/组的自定义属性X?

来自分类Dev

如何将自定义主题应用于Google自定义搜索?

Related 相关文章

  1. 1

    Formik - “脏”被应用于具有相同自定义组件的所有实例

  2. 2

    将不同的属性应用于所有方法的自定义类属性

  3. 3

    将自定义样式应用于页面上的所有按钮

  4. 4

    将不同的属性应用于所有方法的自定义类属性

  5. 5

    jQuery自定义插件更改已应用于所有实例

  6. 6

    如何使自定义 ModelBinder 自动应用于某种类型的所有属性

  7. 7

    将本地组策略对象应用于自定义用户组

  8. 8

    将自定义主题应用于Odoo应用

  9. 9

    React Native:如何将自定义函数应用于对象数组,并在Javascript中返回带有附加字段的修改后的数组?

  10. 10

    在哪里为所有现有和新用户提供自定义提示?

  11. 11

    将自定义函数应用于具有通用名称的任何数据集

  12. 12

    AngularJs有条件地将自定义指令应用于HTML

  13. 13

    HTML / CSS如何将CSS应用于具有自定义数据属性的“ a”?

  14. 14

    HTML / CSS如何将CSS应用于具有自定义数据属性的“ a”?

  15. 15

    将自定义样式应用于微调器

  16. 16

    无法将自定义listSelector应用于ListView

  17. 17

    将自定义函数应用于数据框

  18. 18

    熊猫滚动应用于自定义功能

  19. 19

    将自定义功能应用于熊猫df

  20. 20

    将自定义累积功能应用于熊猫

  21. 21

    将自定义累积功能应用于熊猫

  22. 22

    如何清除应用于元素的自定义样式?

  23. 23

    将语义应用于自定义 git 流

  24. 24

    获取所有行并将总和应用于列

  25. 25

    获取所有行并将总和应用于列

  26. 26

    如何将自定义渲染应用于除Symfony 2.1项目中的某些字段类型以外的所有表单字段

  27. 27

    试图隐藏/显示一个 div 但是 .slideToggle() 应用于页面上的所有 div - 高级自定义字段中继器

  28. 28

    如何修改OU中所有用户/组的自定义属性X?

  29. 29

    如何将自定义主题应用于Google自定义搜索?

热门标签

归档