如何使用Perl获得内置的bash命令

问题描述

| 我想知道是否有办法用perl脚本来获取Linux命令。我说的是诸如“ 0”之类的命令     

解决方法

您可以通过多种方式执行系统命令,有些方式比其他方式更好。 使用
system();
打印命令的输出,但不将输出返回到Perl脚本。 使用反引号(``),不输出任何内容,但将输出返回到Perl脚本。使用实际反引号的另一种方法是使用
qx();
函数,该函数更易于阅读并完成相同的操作。 使用
exec();
,它与
system();
的功能相同,但是除非命令不存在或失败,否则根本不会返回Perl脚本。 使用
open();
,您可以将脚本中的输入传递给命令,也可以将命令的输出读入脚本。 重要的是要提到,使用Perl本身的内置函数可以更好地完成您列出的系统命令(如
cp
ls
)。任何系统调用都是一个缓慢的过程,因此,当所需的结果很简单时(例如复制文件),请使用本机函数。 一些例子:
# 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\");
该页面更详细地说明了进行系统调用的不同方法。     ,正如voithos所说,您可以使用ѭ9或反引号。但是,请考虑到不建议这样做,例如,“ 10”将不起作用(实际上不会更改目录)。请注意,这些命令在新的Shell中执行,不会影响正在运行的perl脚本。 我不会依赖那些命令并尝试在Perl中实现您的脚本(如果您仍然决定使用Perl)。实际上,Perl最初被设计为可以替代sh和其他sysadmins的UNIX shell。     ,您可以将命令括在中间   `命令`     ,问题是perl试图执行内置的bash(即
source
...),就好像它们是真实文件一样,但是perl找不到它们,因为它们不存在。答案是告诉perl明确执行什么。对于bash内置函数,例如
source
,请执行以下操作,它就可以正常工作。
my $XYZZY=`bash -c \"source SOME-FILE; DO_SOMETHING_ELSE; ...\"`;
对于ѭ10的情况,请执行以下操作。
my $LOCATION=`bash -c \"cd /etc/init.d; pwd\"`;
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...