perl:File::Copy:读取现有文件时没有此类文件或目录错误
我正在尝试下载几个示例rails项目中列出的ruby gems,这些示例rails项目是我通过RVM安装的最新版本的ruby通过perl:File::Copy:读取现有文件时没有此类文件或目录错误,perl,Perl,我正在尝试下载几个示例rails项目中列出的ruby gems,这些示例rails项目是我通过RVM安装的最新版本的ruby通过bundle install下载的,我按照说明正确下载bundler文件中列出的gems。我想我应该用这个perl脚本来加速这个过程:(对bash还不太熟悉): 文件显然存在,这些项目大概是用rails命令创建的。为什么会发生这种情况?我如何修复它?当您使用system或backticks调用外部命令时,会生成一个新进程。该进程获取其自己的环境,该环境不与父进程或其他子
bundle install下载的,我按照说明正确下载bundler文件中列出的gems。我想我应该用这个perl脚本来加速这个过程:(对bash还不太熟悉):
文件显然存在,这些项目大概是用rails
命令创建的。为什么会发生这种情况?我如何修复它?当您使用system
或backticks调用外部命令时,会生成一个新进程。该进程获取其自己的环境,该环境不与父进程或其他子进程共享:
system('pwd'); # /foo
system('cd "/bar"');
system('pwd'); # still /foo
(请注意,如果您没有实际存储命令的输出,最好使用system
而不是backticks。)
这意味着当您`cd“$dir”`
时,您的Perl脚本的工作目录没有改变。要修复此问题,请使用本机Perl命令,而不是调用shell命令
下面是一个粗略的示例(未经测试):
使用system
或backticks调用外部命令时,会生成一个新进程。该进程获取其自己的环境,该环境不与父进程或其他子进程共享:
system('pwd'); # /foo
system('cd "/bar"');
system('pwd'); # still /foo
(请注意,如果您没有实际存储命令的输出,最好使用system
而不是backticks。)
这意味着当您`cd“$dir”`
时,您的Perl脚本的工作目录没有改变。要修复此问题,请使用本机Perl命令,而不是调用shell命令
下面是一个粗略的示例(未经测试):
system('pwd'); # /foo
system('cd "/bar"');
system('pwd'); # still /foo
use strict;
use warnings;
use File::Copy;
my $parent_dir = 'foo';
opendir my $dh, $parent_dir or die "opendir failed on '$parent_dir': $!";
my @subdirs = map { "$parent_dir/$_" }
grep { $_ !~ /^\.\.?$/ && -d "$parent_dir/$_" } readdir $dh;
foreach my $subdir (@subdirs) {
my $source = "$subdir/Gemfile";
my $target = "$subdir/tmp.save";
if (-f $source) {
copy $source, $target or die "copy failed: $!";
}
}