我不确定标题是否真的对这个问题有意义。我的问题很简单,我想编写一个perl脚本来更改我当前的目录,并希望在调用perl脚本后可以保留结果。脚本如下所示:
if ($#ARGV != 0) {
print "usage: mycd <dir symbol>";
exit -1;
}
my $dn = shift @ARGV;
if ($dn eq "kite") {
my $cl = `cd ./private`;
print $cl."\n";
}
else {
print "unknown directory symbol";
exit -1;
}
但是,调用脚本后我的当前目录不会更改。是什么原因?我该如何解决?
答案 0 :(得分:1)
不,Perl脚本将在子进程中运行,因此它将无法影响调用它的进程的环境。
您可以使用各种技巧,例如获取shell脚本(在当前shell的上下文而不是子进程中),或使用bash
函数和别名,但它们在此处不起作用。
答案 1 :(得分:0)
Perl如何在同一个shell中执行命令?
除非你有一个非常典型的shell,shell只能通过STDIN,命令行以及内置的命令评估接收命令。
前两个是out,除非Perl脚本是shell的父级,但你可以间接使用第三个,如下例所示。
script.pl
:
#!/usr/bin/perl
print "chdir 'private'\n";
bash
脚本:
echo "$PWD" # /some/dir
eval "$( script.pl )"
echo "$PWD" # /some/dir/private
当然,如果你使用bash
,你可以在shell函数中隐藏细节。
mycd () {
eval "$( mycd.pl "$@" )"
}
允许您使用
mycd
甚至
mycd foo