【问题标题】:Source configuration filr in terminal though perl script通过 perl 脚本在终端中的源配置文件
【发布时间】:2015-01-03 20:48:32
【问题描述】:

我需要通过 perl 脚本将配置文件 'eg.conf' 提供给终端。我正在使用系统命令,但它不起作用。 system('. /etc/eg.conf')

基本上我正在编写脚本,稍后它将使用环境变量(在 conf 文件下)执行其他进程。

【问题讨论】:

    标签: perl shell terminal


    【解决方案1】:

    目前尚不清楚您要实现什么,但如果您想在 Perl 中提供配置并且您的配置文件是有效的 Perl 代码,您可以使用 dorequire(有关更多信息,请参阅 perldoc )。

    您在代码中所做的是使用system 生成一个shell,在此shell 中包含配置(必须采用shell 语法),然后再次退出shell,这当然会在关闭时丢弃所有配置.我猜这不是你打算做的,但你的真正意图并不清楚。

    【讨论】:

    • 基本上我正在编写脚本,稍后它将使用环境变量(在conf文件下)执行其他进程。
    • 然后在调用者 shell 中调用脚本之前获取这些环境变量,或者在调用子进程 shell 中的每个子进程之前获取变量,或者不使用 shell 语法而是提供变量Perl 语法并使用 do/require 阅读它们。不要指望你可以在 Perl 中只包含一个 shell 程序(你的配置是什么)——它们都是不同的编程语言。如果你的配置有一个特定的配置,你当然可以在 Perl 中打开并解析它,但不是一般的 shell 代码。
    【解决方案2】:

    你的目标是什么?您是否需要获取 eg.conf 以从 perl 控制的 shell 中设置进一步的计算,或者您是否试图影响正在运行 perl 脚本的父 shell?

    您对system('. /etc/eg.conf') 的示例调用创建了一个新的shell 子进程。 /etc/eg.conf 来自该 shell,此时 shell 退出。在 perl 脚本和生成 perl 脚本的父进程中没有任何变化。

    没有父进程[1]的帮助,不能从子进程修改父进程的环境。通常将父 shell 的代码返回到 source 或 eval。

    1:好的,理论上可以通过直接插入父进程的内存空间来影响父进程。不要那样做。

    【讨论】:

      猜你喜欢
      • 2020-10-06
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      相关资源
      最近更新 更多