Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl backticks不适用于cd。为什么?_Perl_Backticks - Fatal编程技术网

perl backticks不适用于cd。为什么?

perl backticks不适用于cd。为什么?,perl,backticks,Perl,Backticks,我在win7上使用AS-perl print `cd \\\\ `; # does nothing, says nothing 与qx()相同 其他命令似乎也可以正常工作 cd可以在批处理文件的命令行中正常工作 还有谁见过这个吗?有解决办法吗?您可能正在寻找。在backticks中使用shell命令不会产生持久的效果。运行backtick命令时,生成一个新的shell,执行该命令,并将标准输出返回到Perl。然后shell退出,对它的所有更改都将丢失 我在perl脚本中{更改了目录,修改了我

我在win7上使用AS-perl

print `cd \\\\ `; # does nothing, says nothing
与qx()相同

其他命令似乎也可以正常工作

cd可以在批处理文件的命令行中正常工作

还有谁见过这个吗?有解决办法吗?

您可能正在寻找。在backticks中使用shell命令不会产生持久的效果。运行backtick命令时,生成一个新的shell,执行该命令,并将标准输出返回到Perl。然后shell退出,对它的所有更改都将丢失

我在perl脚本中{更改了目录,修改了我的环境}。为什么我退出脚本时更改消失了?如何使更改可见? 从最严格的意义上讲,这是不可能做到的——脚本的执行过程与它启动时的shell不同。对进程的更改不会反映在其父进程中——只反映在更改后创建的任何子进程中


您希望“更改目录”返回并打印什么?您是否提出了错误的问题,是否希望更改Perl程序的工作目录?请更详细地说明问题以及您想要实现的目标。我希望当程序退出时,提示会显示它在新目录中。它不是!使用该目录中的文件的后续命令失败。Kapish?此外,打印返回任何错误消息。在这个案子里没有,卡皮什?你是认真的吗?!你因缺乏理解而盲目。是的,我们有capisce!这就是为什么我们试图向您解释,``cd\\\\``将在子shell中成功,但不会做任何Perl程序可见的事情。后续的``somecmd``调用将启动当前目录仍保持不变的独立子shell。这就是为什么您需要在Perl脚本中使用
chdir
。虽然我已经尝试了chdir,但它不起作用,但您的信心激励我再次尝试。它仍然无法工作,没有打印错误消息。当我给它一个非法地址时,打印了一条错误消息。chdir做了完全相同的事情,这并不奇怪,因为它是同义词。@user1067305不要将
chdir
chdir
混淆。前者只会更改调用它的shell的工作目录;后者将更改Perl脚本的工作目录。AHA!这就是答案!!我在backticks中使用chdir作为windows命令。使用它作为perl命令,在backticks中后跟dir,为我提供了目标文件夹的dir。谢谢大家!@user1067305您的程序运行得很好,但您是否理解为什么反勾中的cd没有达到您的预期效果?花点时间去理解它在做什么,为什么它不是你想要的,这确实是值得的。出于类似的原因,尝试使用反勾号更改环境变量(如%PATH)也会失败。是的,谢谢。我相信我会的。这里出现的混乱是因为我正在将一个简单的脚本从批处理文件翻译成perl,其中一些命令有效,而另一些则无效。你们解释了原因。另一个困惑是人们说“使用chdir”,但是有两个chdir,windows的和perl的,这就是我要说的。这个命令是一个脚本的一部分,它执行许多其他命令,所有这些命令都有效。cd后面的同一脚本中的命令失败,因为目录没有更改。
print `dir \\\\ `;  # correctly prints the root directory