我有一个perl脚本,它根据作为参数传递的一些输入创建目录randombgs[]
,我希望脚本通过执行以下操作来完成它的执行:
$newdir
这样,bash Linux 64bit中的下一个命令(此处为cd $newdir
)将从program2
工作目录执行。
E.g:
$newdir
答案 0 :(得分:5)
你不能。
您在perl脚本中运行的任何cd
(或类似的)都将仅影响perl脚本(或从perl脚本生成的子shell)。
它不会直接影响父shell。
你唯一能做的就是输出目录然后cd
输出到那个或类似的目录。 (例如cd "$(perl "$HOME"/import_script.pl -i someparameter)" && "$HOME/program2" .
但是意识到这意味着您无法将任何其他输出到perl脚本的标准输出,否则会混淆cd
。)
或者让perl运行第二个命令,等等。
答案 1 :(得分:1)
在这里添加另一个潜在的解决方案;你可以让你的perl脚本输出你想要运行的bash,并使用bash eval运行它。例如;
文件:do.pl:
#!/usr/bin/env perl
use strict;
use warnings;
use File::Temp qw(tempdir);
my $dir = tempdir();
print "echo Whatever I print out will be evaluated in my shell;";
print "cd $dir"; # Separate multiple commands with ';', see ^
来自Bash
[~] > eval `./do.pl`
[~] > Whatever I print out will be evaluated in my shell
[/tmp/BcZI6ZaRB] > _
通过向shell中添加别名或bash函数,可以使事情变得更加轻松。
添加到文件:〜/ .bashrc
doit() {
eval $(./do.pl)
}
来自Bash
[~] > doit
[~] > Whatever I print out will be evaluated in my shell
[/tmp/ejzVGauPXx] > _