在perl系统调用中临时更改默认Shell

时间:2019-03-05 20:11:14

标签: shell perl

这里是情况...
在perl中,我运行此...

 my $stat = system("cd somewhere && source somescript.bash && do_something_else");

对于我所有的用户,除了一个用户,这都不是问题。但是对于一个人来说,这是一个问题,因为它使用tcsh而不是bash来获取somescript.bash。我无法控制某些脚本。 IOW,我不能将#!/ usr / bash放在第1行中。我不能只是“ bash somescript.bash”,因为它设置了do_somethiung_else需要的env vars。

我需要在bash中“脚本化”该脚本,而只是在这个perl系统调用的上下文中。当perl脚本完成时,我不想让这个人有改变的环境。我最好的猜测是以某种方式临时更改默认外壳,但我不知道该怎么做。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

IIRC,有一个环境变量,system / exec将使用该变量来确定默认的shell,但我认为还有一种更直接的方法:

my $stat = system('/bin/bash', -c => 'cd somewhere && source somescript.bash && do_something_else');

也就是说,调用bash,并为其提供所需的命令。在仍然默认为bash的系统上,这几乎是perl在后台进行的操作。在默认设置无法使用的一个系统上,它将强制执行该问题。