在 Thread 中§

有关方法 run,请参阅上下文中的主要文档

method run(Thread:D:)

运行线程并返回调用方。运行已启动的线程是一个错误。

在独立例程中§

有关子例程 run,请参阅上下文中的主要文档

sub run(
    *@args ($*@),
    :$in = '-',
    :$out = '-',
    :$err = '-',
    Bool :$bin = False,
    Bool :$chomp = True,
    Bool :$merge = False,
    Str:D :$enc = 'UTF-8',
    Str:D :$nl = "\n",
    :$cwd = $*CWD,
    Hash() :$env = %*ENV,
    :$arg0,
    :$win-verbatim-args = False
--> Proc:D)

运行外部命令不涉及 shell并返回Proc对象。默认情况下,外部命令将打印到标准输出和错误,并从标准输入读取。

run 'touch''--''*.txt'# Create a file named “*.txt” 
 
run <rm -- *.txt># Another way to use run, using word quoting for the 
                   # arguments

如果你想传递一些变量,你仍然可以使用< >,但尽量避免使用« »,因为如果你忘记引用变量,它将进行单词拆分

my $file = --my arbitrary filename;
run touch--$file;  # RIGHT 
run <touch -->$file;     # RIGHT 
 
run «touch -- "$file"»;    # RIGHT but WRONG if you forget quotes 
run «touch -- $file»;      # WRONG; touches ‘--my’, ‘arbitrary’ and ‘filename’ 
run touch$file;        # WRONG; error from `touch` 
run «touch "$file"»;       # WRONG; error from `touch` 

请注意,许多程序都需要--来区分命令行参数和以连字符开头的文件名

对于未成功退出的进程,已沉没的Proc对象将抛出异常。如果你希望忽略此类故障,只需在非沉没上下文中使用run

run 'false';     # SUNK! Will throw 
run('false').so# OK. Evaluates Proc in Bool context; no sinking

如果你想捕获标准输出或错误而不是直接打印它们,你可以使用:out:err参数,这将使它们可以使用它们各自的方法:Proc.outProc.err

my $proc = run 'echo''Raku is Great!':out:err;
$proc.out.slurp(:close).say# OUTPUT: «Raku is Great!␤» 
$proc.err.slurp(:close).say# OUTPUT: «␤»

你可以使用这些参数将它们重定向到文件句柄,从而创建一种管道

my $ls-alt-handle = open :w'/tmp/cur-dir-ls-alt.txt';
my $proc = run "ls""-alt":out($ls-alt-handle);
# (The file will contain the output of the ls -alt command)

这些参数非常灵活,例如,允许句柄重定向它们。有关更多详细信息,请参阅ProcProc::Async

另请参阅newspawn以获取更多示例和所有参数的说明。