perl如何通过&#; cd $ newdir'完成脚本。

时间:2015-10-27 16:00:03

标签: bash perl

我有一个perl脚本,它根据作为参数传递的一些输入创建目录randombgs[],我希望脚本通过执行以下操作来完成它的执行:

$newdir

这样,bash Linux 64bit中的下一个命令(此处为cd $newdir )将从program2工作目录执行。

E.g:

$newdir

2 个答案:

答案 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] > _