我尝试在perl中实现bash命令system("cd /home/user")
,但是我收到错误说
Can't exec "cd": No such file or directory at temp.pl
有没有办法将当前工作目录更改为指定的工作目录,并且在perl脚本退出后仍然存在更改。
答案 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 。