Perl支持运行外部程序的三种方式(我知道):
system:
system PROGRAM LIST
Run Code Online (Sandbox Code Playgroud)
如:
system "abc";
Run Code Online (Sandbox Code Playgroud)
反引号如:
`abc`;
Run Code Online (Sandbox Code Playgroud)
通过管道运行它,如:
open ABC, "abc|";
Run Code Online (Sandbox Code Playgroud)
它们之间有什么区别?这就是我所知道的:
我需要在Perl中使用system()运行shell命令.例如,
system('ls')
系统调用将打印到STDOUT,但我想将输出捕获到变量中,以便我可以使用Perl代码进行将来的处理.
在Perl中,从我的脚本运行另一个Perl脚本,或运行像任何系统命令mv,cp,pkgadd,pkgrm,pkginfo,rpm等,我们可以使用以下命令:
system()exec()`` (反引号)三者都是一样的,还是不一样?在这种情况下,三者都能得到相同的结果吗?它们是否用于不同的场景,比如调用我们必须使用的Perl程序以及我们必须使用system()的其他程序``(反引号).
请告知,因为我目前正在使用system()所有电话.
我正在尝试perl脚本中的代码,需要在bash中调用另一个文件.不确定,这是最好的方法吗?我可以使用system()直接调用它吗?请指导/给我一个示例方式.
从我到目前为止所尝试的:
#!/usr/bin/perl
system("bash bashscript.sh");
Run Code Online (Sandbox Code Playgroud)
Bash:
#!/bin/bash
echo "cdto codespace ..."
cd codetest
rm -rf cts
for sufix in a o exe ; do
echo ${sufix}
find . -depth -type f -name "*.${sufix}" -exec rm -f {} \;
done
Run Code Online (Sandbox Code Playgroud)
我执行perl脚本时出错:没有这样的文件或目录代码测试
意外令牌附近的语法错误`do
我想编写一个脚本foo这只是调用bar它被称为用,使用bash或Perl完全相同的参数.
现在,在perl中执行此操作的简单方法是
#!/bin/perl
my $args=join(' ', @ARGV);
`bar $args`;
Run Code Online (Sandbox Code Playgroud)
但是,ARGV中的值已经由shell处理,因此如果我打电话
foo "I wonder, \"does this work\""
Run Code Online (Sandbox Code Playgroud)
酒吧会被这样打电话
bar I wonder "does this work"
Run Code Online (Sandbox Code Playgroud)
如何获取原始命令行,以便我可以简单地逐字传递它?
我试图在Perl中运行以下代码:
symlink($oldname,$newname) or die print "$!\n";
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误说:
The symlink function is unimplemented at C:\...\CreateSymlink.pl line 14.
Run Code Online (Sandbox Code Playgroud)
如果我将代码更改为:
link($oldname,$newname) or die print "$!\n";
Run Code Online (Sandbox Code Playgroud)
然后正在创建没有错误的硬链接.
使用Activestate Perl和Windows 7 32位.
任何想法为什么会这样?我正在尝试为文件创建符号链接.
PS:我是Perl的新手.
我有一个gnu.gp文件:
# grphist.conf
set terminal canvas
#Terminal type set to 'canvas'
#Options are ' solid butt size 600,400 fsize 10 lw 1 fontscale 1 standalone'
set output 'output.html'
set grid
set xtic rotate by 90
set style data histograms
set style fill solid 1.00 border -1
#$ cat grphist.conf | gnuplot
plot "c_time" using 2:xtic(1) title "time to number of UIDs"
Run Code Online (Sandbox Code Playgroud)
但是,我必须将它与perl脚本集成.
考虑这两个片段:
#!/bin/bash/perl
open(DATA,"<input.txt");
while(<DATA>)
{
print($_) ;
}
Run Code Online (Sandbox Code Playgroud)
和
$abcd = `cat input.txt`;
print $abcd;
Run Code Online (Sandbox Code Playgroud)
两者都将print文件的内容input.txt作为输出
问题:对于哪一个(反引号或本地方法)应优先于另一个,在任何特定情况下或两者都相等,是否有任何标准?
原因,我问这个是因为我发现cat法比更容易open荷兰国际集团在本地的perl方法的文件,因此,这使我怀疑,如果我能实现通过反引号个什么东西,我该用它去或喜欢的其他本地方法这样做 !!
我也检查过这个帖子:Perl的反引号,系统和exec有什么区别?但它的路线与我的怀疑不同!!
我试图通过以下方式从perl脚本运行bsub命令:
system ("bsub -select "testid::1" -q normal");
Run Code Online (Sandbox Code Playgroud)
但我认为perl因为双引号而变得混乱"testid::1".实现这个的正确方法是什么?
我正在编写一个Perl脚本来自动化一些软件安装.
在我的脚本中,我运行另一个bash脚本并获取其输出并再次打印它.
print `/home/me/build.sh`;
Run Code Online (Sandbox Code Playgroud)
但build.sh脚本需要8分钟,所以我的脚本等到8分钟,脚本完成打印输出的开始.
如何在build.sh程序中打印每一行,因为它在bash shell中运行?
正如下面的评论我使用 system ("/home/me/build.sh");
但输出转到shell但是我在我的脚本中重定向到我的日志文件,
open $fh, "> filename";
*STDOUT = $fh;
*STDERR = $fh;
Run Code Online (Sandbox Code Playgroud)
那么当我使用系统功能时,它的输出将被重定向到文件名,但事实并非如此.
我应该用print system ("/home/me/build.sh");而不是system ("/home/me/build.sh");吗?
完整代码:
#!/usr/bin/perl
use strict;
use warnings;
use IO::File;
my %DELIVERIES = ();
my $APP_PATH = $ENV{HOME};
my $LOG_DIR = "$APP_PATH/logs";
my ($PRG_NAME) = $0 =~ /^[\/.].*\/([a-zA-Z]*.*)/;
main(@argv);
sub main
{
my @comps = components_name();
my $comp;
my $pid;
while ( scalar @comps ) {
$comp = pop @comps;
if …Run Code Online (Sandbox Code Playgroud) 我有一个文件,我必须通过块(基于时间戳)读取块.所以我使用awk在两个时间间隔之间读取,然后我必须进一步处理数据.为此,我必须阅读我从awk Line By Line收到的字符串.当我使用新字符执行拆分时,它不会拆分,但只有所有字符串都保留在第一个字段中.我使用了不同的转义字符但没有任何成功.
我的主要目的是逐行读取字符串.
$cmd = "awk '\$0>=from&&\$0<=to' from=\"$currentTime\" to=\"$nextTime\" Output.txt";
$dataChunk = system ($cmd);
my @lines = split /[\r\s\v\V\n]+/, $dataChunk;
foreach my $line (@lines) {
chomp;
$timeStamp1 = (split /-/, $line)[1];
print "\n$timeStamp1\n";
exit;
}
Run Code Online (Sandbox Code Playgroud) 我是perl.Below的新手,是使用perl触摸目录的代码
#!/usr/bin/perl
# Populate the hashMap
# keys --> directories to clean
# attributes --> days to keep.
print "<-------------------------------------------------------->";
print " Touching of folders Started ";
touch `/tmp/dir1`;
touch `/tmp/dir2`;
print " Touching of folders Ended ";
print "<-------------------------------------------------------->";
Run Code Online (Sandbox Code Playgroud)
运行脚本时出现以下语法错误.请帮忙.
$ ./FeedServerHscript.sh
Backticks found where operator expected at /tmp/eCAS_Housekeep/Ecas_54.pl line 11, near "touch `/tmp/dir1`"
(Do you need to predeclare touch?)
Backticks found where operator expected at /tmp/eCAS_Housekeep/Ecas_54.pl line 12, near "touch `/tmp/dir2`"
(Do you need to predeclare touch?)
syntax …Run Code Online (Sandbox Code Playgroud)