perl如何通过'cd $ newdir'完成脚本

719*_*016 1 bash perl

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

cd $newdir
Run Code Online (Sandbox Code Playgroud)

因此,bash Linux 64bit(此处program2)中的下一个命令是从$newdir工作目录执行的.

例如:

perl $HOME/import_script.pl -i someparameter && $HOME/program2 .
Run Code Online (Sandbox Code Playgroud)

Eta*_*ner 5

你不能.

cd您在perl脚本中运行的任何(或类似)将仅影响perl脚本(或从perl脚本生成的子shell).

它不能直接影响父shell.

你唯一能做的就是输出目录,然后输出cd到那个或类似的目录.(例如,cd "$(perl "$HOME"/import_script.pl -i someparameter)" && "$HOME/program2" .但是意识到这意味着你不能从perl脚本输出任何其他标准输出,否则会混淆cd.)

或者让perl运行第二个命令,等等.

  • 根据shell的不同,你也不能这样做.`cd`只接受一个论点; 它不从标准输入读取.有些shell可能允许像`echo my_directory |这样的hack cd <(cat)`,但大多数shell(`ksh`是一个例外)在一个单独的进程中运行管道的每一侧,导致你遇到同样的问题,阻止你在perl脚本中运行`cd`.(并且*some*shells提供了在当前shell中运行管道的*last*进程的选项,但是我们正在进入需要执行任何操作所需的特殊情况.) (2认同)