在 Thread 中§
有关方法 run,请参阅上下文中的主要文档
method run(Thread:)
运行线程并返回调用方。运行已启动的线程是一个错误。
在独立例程中§
有关子例程 run,请参阅上下文中的主要文档
sub run(* ($, *@),: = '-',: = '-',: = '-',Bool : = False,Bool : = True,Bool : = False,Str : = 'UTF-8',Str : = "\n",: = ,Hash() : = ,:,: = False--> Proc)
运行外部命令不涉及 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 = ‘--my arbitrary filename’;run ‘touch’, ‘--’, ; # RIGHTrun <touch -->, ; # RIGHTrun «touch -- "$file"»; # RIGHT but WRONG if you forget quotesrun «touch -- »; # WRONG; touches ‘--my’, ‘arbitrary’ and ‘filename’run ‘touch’, ; # WRONG; error from `touch`run «touch "$file"»; # WRONG; error from `touch`
请注意,许多程序都需要--
来区分命令行参数和以连字符开头的文件名。
对于未成功退出的进程,已沉没的Proc
对象将抛出异常。如果你希望忽略此类故障,只需在非沉没上下文中使用run
run 'false'; # SUNK! Will throwrun('false').so; # OK. Evaluates Proc in Bool context; no sinking
如果你想捕获标准输出或错误而不是直接打印它们,你可以使用:out
或:err
参数,这将使它们可以使用它们各自的方法:Proc.out
和Proc.err
。
my = run 'echo', 'Raku is Great!', :out, :err;.out.slurp(:close).say; # OUTPUT: «Raku is Great!».err.slurp(:close).say; # OUTPUT: «»
你可以使用这些参数将它们重定向到文件句柄,从而创建一种管道
my = open :w, '/tmp/cur-dir-ls-alt.txt';my = run "ls", "-alt", :out();# (The file will contain the output of the ls -alt command)
这些参数非常灵活,例如,允许句柄重定向它们。有关更多详细信息,请参阅Proc
和Proc::Async
。