如何使用Perl获取bash内置命令

Ste*_*ris 2 linux perl

我想知道是否有办法用perl脚本获取Linux命令.我在谈论诸如此类的命令cd ls ll clear cp

voi*_*hos 6

您可以通过多种方式执行系统命令,有些方法比其他方式更好.

  • 使用system();,打印命令的输出,但不将输出返回到Perl脚本.
  • 使用反引号(``),它不会打印任何内容,但会将输出返回给Perl脚本.使用实际反引号的另一种方法是使用该qx();函数,该函数更易于阅读并完成相同的操作.
  • 除非命令不存在或失败,否则使用exec();,执行相同的操作system();,但根本不返回Perl脚本.
  • 使用open();,它允许您将脚本的输入管道输出到命令,或者将命令的输出读入脚本.

重要的是要提到您列出的系统命令,cp并且ls使用Perl本身的内置函数可以做得更好.任何系统调用都是一个缓慢的过程,因此当期望的结果很简单时使用本机函数,比如复制文件.

一些例子:

# Prints the output. Don't do this.
system("ls");

# Saves the output to a variable. Don't do this.
$lsResults = `ls`;

# Something like this is more useful.
system("imgcvt", "-f", "sgi", "-t", "tiff", "Image.sgi", "NewImage.tiff");
Run Code Online (Sandbox Code Playgroud)

本页详细介绍了可以进行系统调用的不同方法.

  • 我会劝阻使用反引号.`qx();`语法更清晰,更容易阅读.我也不鼓励使用外部命令.当`File :: Copy`随时可用时,太多人使用`cp`或`copy`来复制文件.在使用外部命令之前,请使用Perl本机命令和模块. (2认同)