在perl中实现bash命令cd

时间:2014-06-10 05:51:50

标签: perl bash

我尝试在perl中实现bash命令system("cd /home/user"),但是我收到错误说

Can't exec "cd": No such file or directory at temp.pl 

有没有办法将当前工作目录更改为指定的工作目录,并且在perl脚本退出后仍然存在更改。

5 个答案:

答案 0 :(得分:5)

没有。进程无法更改其父进程的当前工作目录。 Shell将cd之类的命令实现为“builtins”,这意味着它们是shell本身的一个函数,而不是一个可以运行的独立进程。

您可以使用chdir($dir)更改perl中的当前目录,并且该更改将由子进程继承 - 但不会传递给父进程。

答案 1 :(得分:3)

如果要更改脚本中的目录,可以使用Perl命令chdir('dir')

示例:

chdir($dir);

您实际上无法修改父进程的目录,但您可以修改当前进程

答案 2 :(得分:2)

您无法在UNIX中修改其他进程的当前工作目录,至少在没有严重骚扰的情况下也是如此。

这就是为什么cd是所有shell中内置的原因。它不是外部程序(也不能作为外部程序实现)。

答案 3 :(得分:2)

cd不是进程,它是一个shell内置命令,用于更改该shell进程的当前工作目录。

因此请使用system("sh -c 'cd /my/dir'")。但是这里系统命令本身会调用另一个,所以它仍然不会改变目录。

使用chdir

答案 4 :(得分:0)

cd不是一个进程,它是一个 shell内置命令,用于更改该shell进程的当前工作目录。所以系统(" sh -c' cd / cat / bat'")将会成功" ,但仍然不会t更改perl进程的工作目录;使用 chdir