perl - 如何在 Perl 脚本中导出 shell 变量?

标签 perl unix shell environment-variables

我有一个 shell 脚本,其中包含一个 shell 变量列表,它在进入编程环境之前执行。

我想用一个Perl脚本进入编程环境:

system("environment_defaults.sh");
system("obe");

但是当我进入环境时,变量没有设置。

最佳答案

当您调用第二个命令时,它不是在您在第一个命令中修改的环境中完成的。实际上,第一个命令没有留下任何环境,因为用于调用“environment_defaults.sh”的shell已经退出。

要将第一个命令的上下文保留在第二个命令中,请在同一个 shell 中调用它们:

system("source environment_defaults.sh && obe");

请注意,您需要使用 source 调用 shell 脚本。为了在当前 shell 中执行它的操作,而不是调用一个新的 shell 来执行它们。

或者,在每个 shell 的开头修改您的环境(例如,使用 .bash_profile,如果使用 bash),或者在 perl 本身中更改您的环境变量:
$ENV{FOO} = "hello";
system('echo $FOO');

关于perl - 如何在 Perl 脚本中导出 shell 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2967762/

相关文章:

java - 每秒从 Java 程序中的 Linux 实用程序接收值

perl - 如何判断我的程序中是否实际使用了 Perl 模块?

linux - 使用shell脚本根据字符分割字符串

linux - 如何使用 fortran 或 shell 在同一文件中突出显示其右侧的不匹配数据?

unix - 如何通过指定进程名称获取进程的PID并将其存储在变量中以供进一步使用?

linux - 在设置位置参数时使用 - 和 -- 作为要设置的选项之间的区别

perl - 递归列出所有文件但排除一些目录(.git .svn)

mysql - 无法执行 SQL 查询

perl 获取数组中匹配项的索引

shell - 如何从 CLI 控制 Cisco IP-Phone?