【问题标题】:Change shell within Perl script在 Perl 脚本中更改 shell
【发布时间】:2023-03-16 07:12:01
【问题描述】:

我正在寻找一种完成以下工作的好方法:

所以我有一个脚本,我需要通过调用 Perl 脚本在 Unix 中的 Python 中运行该脚本,而 Perl 脚本又使用 Plink 从 Windows 中的 Excel VBA 宏调用。由于依赖问题,Python 脚本必须在 csh 或 bash 中运行,我需要在运行脚本之前使用 export/setenv 添加一些库。但是默认情况下,perl 在 sh shell 中运行,因此,我无法添加所有依赖项并让 Python 脚本运行。

所以,我只是想知道是否有:1. 一种在 perl 脚本中向 sh shell 添加依赖项的方法,或者 2. 强制我的 perl 脚本在 csh 中运行(首选,因为某些原因。该帐户的 bashrc 遇到权限问题)。

非常感谢!

【问题讨论】:

  • "Python 脚本,由于依赖问题,必须在 csh 或 bash 中运行" 是的,不。这听起来很可疑。添加更多详细信息。
  • @IgnacioVazquez-Abrams:简单地说,如果我在 sh 中运行它,.cshrc 不会被加载,我需要一些 export PATH= 或 setenv PATH=。

标签: perl shell unix


【解决方案1】:

“3. 在 Perl 或 Python 脚本中设置适当的环境变量”怎么样?

$ENV{'PATH'} = ...

...

os.environ['PATH'] = os.pathsep.join(newpaths + os.environ['PATH'].split(os.pathsep))

(不知道如何在 Perl 中获取路径分隔符,sorz)

【讨论】:

  • 我还不能投票,但这听起来是一个合理的方法,我必须先通过调用我的 $ENV 来定义 $ENV 还是 Perl 应该能够自动识别它?非常感谢!
  • 我对 Perl 的了解还不够,无法回答这个问题,但将它作为一个全局对象是有意义的。
  • 非常感谢,我会试一试告诉你。
【解决方案2】:

要强制 shell 使用 csh,请在 Perl 中尝试以下操作:

`/bin/csh -c "command_name"`;

编辑

您可以像这样使用 ENV 变量。试试看:

$s = `/bin/bash -c 'VAR_FOO=753; echo \$VAR_FOO'`;
print $s;

【讨论】:

  • 试过了,但由于某种原因,如果我在 command_name 中执行“echo $SHELL”,我仍然会以 /bin/sh .....
  • 查看我编辑过的帖子,试试看,告诉我它是否有效
  • 我明天早上上班时试一试(不幸的是没有 VPN 令牌),非常感谢!
【解决方案3】:

我最终只是更改了 .cshrc 脚本,显然,由于某种原因,对 PATH 的添加对我不起作用。之后,一切都在一行中顺利进行

所以基本上它看起来像这样

/path/to/.cshrc && /python/path/to/python

希望有帮助!

【讨论】: