class IO::Spec::Unix is IO::Spec  { }

如果 Raku 解释器在类 Unix 平台上运行,则可以通过变量 $*SPEC 使用此类型的对象。

有关此类及其相关类的信息,另请参见 IO::Spec

方法§

方法 abs2rel§

method abs2rel(IO::Path:D $pathIO::Path:D $base = $*CWD --> Str:D)

返回一个字符串,表示 $path,但相对于 $base 路径。$path$base 都可以是相对路径。$base 默认为 $*CWD

方法 basename§

method basename(Str:D $path --> Str:D)

将路径作为字符串,并返回最后一个斜杠后面的可能为空的部分

IO::Spec::Unix.basename("foo/bar/".raku.say# OUTPUT: «""␤» 
IO::Spec::Unix.basename("foo/bar/.").raku.say# OUTPUT: «"."␤» 
IO::Spec::Unix.basename("foo/bar")  .raku.say# OUTPUT: «"bar"␤»

方法 canonpath§

method canonpath(Str() $path:$parent --> Str:D)

返回一个字符串,它是 $path 的规范表示形式。如果 :$parent 设置为 true,还将清理对父目录的引用。注意:该例程不访问文件系统,因此不会跟随任何符号链接。

IO::Spec::Unix.canonpath("foo//../bar/../ber").say;
# OUTPUT: «foo/../bar/../ber␤» 
 
IO::Spec::Unix.canonpath("foo///./../bar/../ber").say;
# OUTPUT: «foo/../bar/../ber␤» 
 
IO::Spec::Unix.canonpath("foo///./../bar/../ber":parent).say;
# OUTPUT: «ber␤»

方法 catdir§

method catdir (*@parts --> Str:D)

连接多个路径片段,并返回结果路径的规范表示形式作为字符串。@partsStr 对象,并且允许包含路径分隔符。

IO::Spec::Unix.catdir(<foo/bar ber raku>).say# OUTPUT: «foo/bar/ber/raku␤»

方法 catfile§

catdir 的别名。

方法 catpath§

method catpath ($Str:D $part1Str:D $part2 --> Str:D)

获取两个路径片段并连接它们,必要时添加或删除路径分隔符。第一个参数被忽略(它存在是为了与其他 IO::Spec 类型保持一致的接口,这些类型适用于具有卷的系统)。

IO::Spec::Unix.catpath($'some/dir''and/more').say;
# OUTPUT: «some/dir/and/more␤»

方法 curdir§

method curdir()

返回一个字符串,表示当前目录

say '.' eq $*SPEC.curdir# OUTPUT: «True␤»

方法 curupdir§

method curupdir()

返回一个 Block,接受一个参数。如果其参数既不是表示当前目录的字符串,也不是表示当前目录上一级的字符串,则此块返回 True。否则,它返回 False。此块旨在与 智能匹配 一起使用。

say $*SPEC.curupdir;
# OUTPUT: «-> str $dir { #`(Block|65335808) ... }␤» 
 
my @dirs = <. foo .. bar>;
say @dirs.grep: { $_ ~~ $*SPEC.curupdir };
# OUTPUT: «(foo bar)␤» 

foobar 都与当前目录或父目录的表示形式不相等,这就是它们由 grep 返回的原因。

注意:在 Rakudo 2020.06 版本之前,会返回一个 none Junction,而不是 Block

方法 devnull§

method devnull(--> Str:D)

返回字符串 "/dev/null",表示 "空设备"

$*SPEC.devnull.IO.spurt: "foo bar baz";

方法 dir-sep§

method dir-sep(--> Str:D)

返回字符串 "/",表示规范目录分隔符字符。

IO::Spec::Unix.dir-sep.say# OUTPUT: «/␤» 

方法 extension§

注意:大多数用户会希望使用更高级别的例程 IO::Path.extension,而不是此低级别版本。

method extension(Str:D $path --> Str:D)

获取表示基本名称的字符串,并返回最后一个点 (".") 之后的字符,如果没有点,则返回空字符串。该例程不会尝试检测路径分隔符,并将返回最后一个点之后的所有内容。

$*SPEC.extension('foo.'      ).raku.say;  # OUTPUT: «""␤» 
$*SPEC.extension('foo.txt'   ).raku.say;  # OUTPUT: «"txt"␤» 
$*SPEC.extension('foo.tar.gz').raku.say;  # OUTPUT: «"gz"␤» 
$*SPEC.extension('foo'       ).raku.say;  # OUTPUT: «""␤» 
$*SPEC.extension('bar.foo/foo').raku.say# OUTPUT: «"foo/foo"␤»

方法 is-absolute§

method is-absolute(Str:D $path --> Bool:D)

如果 $path 以斜杠 ("/") 开头,则返回 True,即使其上有组合字符

say IO::Spec::Unix.is-absolute: "/foo";        # OUTPUT: «True␤» 
say IO::Spec::Unix.is-absolute: "/\x[308]foo"# OUTPUT: «True␤» 
say IO::Spec::Unix.is-absolute: "bar";         # OUTPUT: «False␤»

方法 join§

method join ($Str:D $dirStr:D $file --> Str:D)

类似于 catpath,获取两个路径片段并将其连接起来,必要时添加或删除路径分隔符,但如果 $dir$file 都是字符串 '/'$dir 是字符串 '.',则它将仅返回 $file。第一个参数被忽略(它存在是为了与其他 IO::Spec 类型保持一致的接口,适用于具有卷的系统)。

IO::Spec::Unix.join($'foo''bar').say# OUTPUT: «foo/bar␤» 
IO::Spec::Unix.join($'/''/').say;     # OUTPUT: «/␤» 
IO::Spec::Unix.join($'.''foo').say;   # OUTPUT: «foo␤» 
say $*SPEC.join(True,".","/foo");         # OUTPUT: «/foo␤»

方法 path§

method path(--> Seq:D)

按冒号 (":") 分割 %*ENV<PATH> 的值,用 "." 替换空部分,并返回一个 Seq,其中包含每个结果部分。如果未设置 %*ENV<PATH> 或其为空字符串,则返回一个空的 Seq

%*ENV<PATH> = 'foo:bar/ber::foo:';
IO::Spec::Unix.path.raku.say;
# OUTPUT: «("foo", "bar/ber", ".", "foo", ".").Seq␤»

方法 rel2abs§

method rel2abs(Str() $path$base = $*CWD --> Str:D)

返回一个字符串,表示已转换为绝对路径的 $path,基于 $base,其默认为 $*CWD。如果 $base 不是绝对路径,则它将相对于 $*CWD 成为绝对路径,除非 $*CWD$base 相同。

say $*CWD;                                  # OUTPUT: «"/home/camelia".IO␤» 
 
say IO::Spec::Unix.rel2abs: 'foo';          # OUTPUT: «/home/camelia/foo␤» 
say IO::Spec::Unix.rel2abs: './';           # OUTPUT: «/home/camelia␤» 
say IO::Spec::Unix.rel2abs: 'foo/../../';   # OUTPUT: «/home/camelia/foo/../..␤» 
say IO::Spec::Unix.rel2abs: '/foo/';        # OUTPUT: «/foo␤» 
 
say IO::Spec::Unix.rel2abs: 'foo''bar';   # OUTPUT: «/home/camelia/bar/foo␤» 
say IO::Spec::Unix.rel2abs: './''/bar';   # OUTPUT: «/bar␤» 
say IO::Spec::Unix.rel2abs: '/foo/''bar'# OUTPUT: «/foo␤» 
 
say IO::Spec::Unix.rel2abs: 'foo/../../''bar';
# OUTPUT: «/home/camelia/bar/foo/../..␤» 

方法 rootdir§

method rootdir(--> Str:D)

返回字符串 '/',表示根目录。

方法 split§

method split(IO::Spec::Unix: Cool:D $path)

$path 创建一个 IO::Path::Parts,其 volume 属性的值为空字符串。

IO::Spec::Unix.split('C:/foo/bar.txt').raku.say;
# OUTPUT: «IO::Path::Parts.new("","C:/foo","bar.txt")␤» 
 
IO::Spec::Unix.split('/foo/').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","foo")␤» 
 
IO::Spec::Unix.split('///').raku.say;
# OUTPUT: «IO::Path::Parts.new("","/","/")␤» 
 
IO::Spec::Unix.split('./').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Unix.split('.').raku.say;
# OUTPUT: «IO::Path::Parts.new("",".",".")␤» 
 
IO::Spec::Unix.split('').raku.say;
# OUTPUT: «IO::Path::Parts.new("","","")␤» 

注意:在 Rakudo 2020.06 版本之前,此方法将给定的 $path 分割为“卷”、“目录名”和“基本名称”,并以 List 的形式返回结果,其中包含三个 Pair,按此顺序排列。

方法 splitdir§

method splitdir(Cool:D $path --> List:D)

按照斜杠分割给定的 $path

IO::Spec::Unix.splitdir('C:\foo/bar.txt').raku.say;
# OUTPUT: «("C:\\foo", "bar.txt")␤» 
 
IO::Spec::Unix.splitdir('/foo/').raku.say;
# OUTPUT: «("", "foo", "")␤» 
 
IO::Spec::Unix.splitdir('///').raku.say;
# OUTPUT: «("", "", "", "")␤» 
 
IO::Spec::Unix.splitdir('./').raku.say;
# OUTPUT: «(".", "")␤» 
 
IO::Spec::Unix.splitdir('.').raku.say;
# OUTPUT: «(".",)␤» 
 
IO::Spec::Unix.splitdir('').raku.say;
# OUTPUT: «("",)␤» 

方法 splitpath§

method splitpath(Cool:D $path:$nofile --> List:D)

将给定的 $path 分割为 3 个字符串的列表:卷、目录名和文件。卷始终为空字符串,返回以与其他 IO::Spec 类型保持 API 兼容性。如果 :$nofile 命名参数设置为 True,则文件字符串的内容未定义,应忽略;这是一种提高性能的方法,因为在不需要文件时,实现可能会使用更快的代码路径。

IO::Spec::Unix.splitpath('C:\foo/bar.txt').raku.say;
# OUTPUT: «("", "C:\\foo/", "bar.txt")␤» 
 
IO::Spec::Unix.splitpath('C:\foo/bar.txt':nofile).raku.say;
# OUTPUT: «("", "C:\\foo/bar.txt", "")␤» 
 
IO::Spec::Unix.splitpath('/foo/').raku.say;
# OUTPUT: «("", "/foo/", "")␤» 
 
IO::Spec::Unix.splitpath('/foo/':nofile).raku.say;
# OUTPUT: «("", "/foo/", "")␤» 
 
IO::Spec::Unix.splitpath('///').raku.say;
# OUTPUT: «("", "///", "")␤» 
 
IO::Spec::Unix.splitpath('./').raku.say;
# OUTPUT: «("", "./", "")␤» 
 
IO::Spec::Unix.splitpath('.').raku.say;
# OUTPUT: «("", "", ".")␤» 
 
IO::Spec::Unix.splitpath('').raku.say;
# OUTPUT: «("", "", "")␤» 

方法 tmpdir§

method tmpdir(--> IO::Path:D)

尝试通过检查几个典型目录和环境变量来找到系统的临时目录。如果没有找到合适的目录,则使用当前目录。

方法 updir§

method updir()

返回表示当前目录上一级的字符串

say '..' eq $*SPEC.updir# OUTPUT: «True␤»