免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3022 | 回复: 7

chdir 咋不好使 [复制链接]

论坛徽章:
0
发表于 2016-11-30 13:55 |显示全部楼层
本帖最后由 david_95 于 2016-11-30 15:04 编辑

运行 cmd ,
我当前目录是 c:\software
我想用perl 切换工作目录到 c:/temp
perl -eMcwd "chdir('c:/temp') or die('failed');"

但是还是目录没变,麻烦谁帮忙看看

论坛徽章:
0
发表于 2016-11-30 15:19 |显示全部楼层
我发现执行 chdir return 1; 但是我cmd 当前目录没有变,这是咋回事呢?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2016-11-30 15:22 |显示全部楼层
每个进程都有自己的cwd,否则就乱套了。你修改的只是 perl 进程的,而它只是启动时从 cmd 的进程继承了这一属性然后就分道扬镳了。

所以 cd 是 cmd.exe 自己识别的命令,不能是个 exe

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2016-11-30 15:27 |显示全部楼层
同样还有环境变量,你不重开 cmd 在属性哪里修改环境变量是没用的

论坛徽章:
0
发表于 2016-11-30 15:33 |显示全部楼层
哦,有道理,谢谢,如果我想用perl ,又想改变当前的cmd 窗口的目录, 应该怎么作呢?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2016-11-30 15:47 |显示全部楼层
在 perl 里用 system 再开个 cmd 进程

论坛徽章:
0
发表于 2016-11-30 16:13 |显示全部楼层
不清楚 开cmd 怎么开, 加了system("cmd"); 然后运行我的脚本还不行。后来就用windows 自己的batch 命令代替perl 了
我的脚本就是切换不同的目录,作编译
use Cwd;

my $file="mybatch.bat.txt";
open(FILE_1,"<$file");
system("cmd /C");
while(my $line=<FILE_1>){
        print "Command:=".$line."\n";
        if($line=~/cd\s(\w+)/g){
                my $tarDir=($1=~s/\\/\//g);
                print "Tardir = $tarDir\n";
                chdir($1);
                print "CurrentDir:=".cwd()."\n";
        }else{
                system("$line");
        }
       
        print "Done > $line";
}
close FILE_1;


现在我用window 的batch ,执行命令 用 call , 这样可以了,

论坛徽章:
0
发表于 2016-12-01 12:18 |显示全部楼层
perl中的chdir函数不能改变perl运行的工作目录,只能改变perl程序运行中的目录,perl所在的工作目录只能由其所在的shell来完成。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP