请分享NATIVE Raku 替代品(TIMTOWTDIBSCINABTE“Tim Toady Bicarbonate”)至:
raku -e 'qqx{ df -hP $*CWD }.print'
Run Code Online (Sandbox Code Playgroud)
这里,raku -executesdf经由壳(磁盘免费)的外部程序与插值引用qqx{},喂养-hUMAN可读参数,-Portable格式参数和$*CWD当前工作目录,则.printS中df的输出。
raku -e 'run <<df -hP $*CWD>>'
Run Code Online (Sandbox Code Playgroud)
如果你只是df在 STDOUT 上输出给你的东西,你不需要做任何事情。
的<< >>是双引号的话,这样$*CWD会被插入。
没有用于报告存储空间统计信息的内置功能。选项包括:
\n编写 Raku 代码(几行),用于NativeCall调用平台/文件系统特定的系统调用(例如statvfs())并使用该调用返回的信息。
使用合适的 Raku 库。FileSystem::Capacity为您选择并运行外部程序,然后以可移植的形式提供其结果数据。
使用run(或类似1)调用特定的外部程序,例如df.
使用Inline::*外语适配器来调用外国 PL 的解决方案来报告存储空间统计信息,并使用它提供的信息。2
Raku 似乎简洁地报告道No space left on device:
> spurt \'/tmp/failwrite\', \'filesystem is full!\'\nFailed to write bytes to filehandle: No space left on device\n in block <unit> at <unknown file> line 1\n\n> mkdir \'/tmp/failmkdir\'\nFailed to create directory \'/tmp/failmkdir\' with mode \'0o777\': Failed to mkdir: No space left on device\n in block <unit> at <unknown file> line 1\nRun Code Online (Sandbox Code Playgroud)\n(程序员需要避免丢弃这些异常。)
\n1 run运行外部命令而不涉及 shell。这保证了消除涉及外壳的风险。也就是说,Raku 还支持使用 shell(因为这在某些情况下可能很方便且合适)。请参阅问题下的意见交换(例如,此一个)以获取对此的一些简短讨论,并参阅shell文档以获取风险摘要:
\n\n所有 shell 元字符都由 shell 解释,包括管道、重定向、环境变量替换等。Shell 转义是一个严重的安全问题,可能会导致与异常文件名的混淆。
\nrun如果您想安全,请使用。
2 Raku 的外语适配器(Inline::命名空间中的 Raku 模块)允许 Raku 代码使用用其他语言编写的代码。这些适配器不是 Raku 语言标准的一部分,而且大多数适配器都只是实验状态,如果是的话,但相反,最好的适配器状态良好,允许 Raku 代码使用外部库,就像它们是为 Raku 编写的一样。(截至 2021 年Inline::Perl5是最完善的。)