我有一个Perl脚本,按顺序使用system()函数启动一些程序。 当脚本正在运行并且程序正在运行时,我键入CTRL + C。我期望程序终止(发生这种情况),但是我也希望脚本终止(这不会发生)。 我已经build立了一个最低工作的例子。 这是Perl脚本: #!/bin/env perl sub run_the_test { local($name, $_) = @_; print "Starting $name\n"; return system("program.bash $name"); } &run_the_test("test1"); &run_the_test("test2"); &run_the_test("test3"); 这里是外部的“程序”: #!/bin/env bash echo "Started $1" sleep 3 echo "Finished $1" 我启动了脚本并发出了一个CTRL + Z.然后我做了一个ps -o pid,pgrp,cmd来列出进程信息。 我可以看到脚本,它调用的bash shell和sleep命令都属于同一个进程组。 当sleep正在执行时,我也希望成为前台进程组。 我已经读了一些Linux,信号和terminal,发现CTRL + C应该发送一个中断到整个前台进程组,因此也终止了脚本。 我也尝试使用exec()而不是system() 。 这样脚本在触发CTRL + C时就停止了,但是它不会跑过test1 。 任何人都可以点亮这里发生的事情吗?
比方说,我有这样的事情(这只是一个例子,实际的请求会有所不同:我加载了LiveOTPHeaders的StackOverflow,并且启用了一些示例): http://stackoverflow.com/ GET / HTTP / 1.1 主机:stackoverflow.com User-Agent:Mozilla / 5.0(X11; U; Linux i686; en-US; rv:1.8.1.2)Gecko / 20070220 Firefox / 2.0.0.2 接受:text / xml,application / xml,application / xhtml + xml,text / html; q = 0.9,text / plain; q = 0.8,image / png,* / *; q = 0.5 Accept-Language:en-us,en; q = 0.5 Accept-Encoding:gzip,deflate Accept-Charset:ISO-8859-1,utf-8; q = […]
我想在bash中有这样的pipe道 #! /usr/bin/bash cut -f1,2 file1.txt | myperl.pl foo | sort -u 现在在myperl.pl它有这样的内容 my $argv = $ARG[0] || "foo"; while (<>) { chomp; if ($argv eq "foo") { # do something with $_ } else { # do another } } 但为什么Perl脚本无法识别通过bash传递的参数? 即代码与此消息中断: Can't open foo: No such file or directory at myperl.pl line 15. […]
可能重复: 如何确定给定的Linux是32位还是64位? 我不想直接访问shell(例如使用uname)。 我正在寻找一种快速的方式来检测体系结构(只有在32位或64位时),一旦我知道我在Linux上。
#!/usr/local/bin/perl use strict; use warnings; system("cd $PATH /usr/bin/sftp mysite.com <<!EOF put sample.txt bye !EPF"); 当我在应用程序complile,它询问密码,如何通过代码本身的用户/密码, 我想要的是,我的脚本不应该问密码。 我想在代码本身设置用户/密码。 用户命令不工作在sftp如何使它。
我怎样才能在目录中的每个文件中find并replace{%extends“a / b / c / d”%}中的每个实例与另一个{%extends“e / f / g / h”%} 另外,如果在同一行的声明之后有任何内容,我想保留它。 我已经看过了使用perl,如下所示: perl -pi -e 's/find/replace/g' *.html 但我不知道perl,不知道最好的方式来逃避我find/replacestring(即{。/,“等)中的所有字符。 更简单的解决scheme
在工作中,我们使用这个结构来查找所有文件的名字,在上一次更新之后在SVN中进行了更改,并对它们执行svn add命令: svn st | grep '^\?' | perl -pe 's/^\s*\?// | xargs -L 1 svn add' 我想:“我希望我可以使用Perl单行脚本而不是grep ”。 是否有可能做,如果是的话? PS:我发现在Perl中有一个m//运算符。 我认为它应该用在ARGVvariables上(不知道它们在Perl中的名字 – 可能是$_数组还是$1类variables?)。
当在我的代码库中修复大量拼写错误时,我使用了这个: find . -path '*/.svn' -prune -o -name "*min.js" -prune -o -name "*min.css" -prune -o -name "flashLocaleXml.xml" -prune -o -type f -print0 | xargs -0 egrep -n "priority=" -exec sed -i 's/replace/newval/' {} \; 修复我的回购中的所有文件中的特定拼写错误。 然而,我不是很好的sed捕获,我想要做的事情如: X.addEventListener(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels); 变为: EventUtil.addEventListener(X, LevelUpEvent.GENERIC_LEVEL_UP, updateLevels) ; 我已经广泛地阅读,但是我会很感激有人解释sed捕获如何作为一个具体的例子。 我已经给了它几个镜头,但没有我拿出作品:这是我的尝试 echo "X.addEventListener(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);" | sed 's/\(.*\)EventUtil\(.*EventUtil\)/\1X\2/' echo "X.addEventListener(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);" | […]
所以像这样的东西 <h2 style='margin-top: 10px;'> <?php echo $title; ?> </h2> 应该成为 <h1 style='margin-top: 10px;'> <?php echo $title; ?> </h1> 我使用这个代码perl -pi -e 's/<h2(.*)<\/h2>/<h1\1<\/h1>/g' *但它只在标签位于一行时才起作用。
我有很多的Perl脚本,需要更新到一个一致的版本要求,并有各种版本和标志目前。 所有这些陈述都在脚本的第一行。 我在这里没有太多的运气,显然是想用sed,但是有什么更好的吗? 需要编辑的示例行 #!/opt/local/bin/perl5 我尝试了一个bash脚本如下,但它不适合我。 #!/bin/bash echo "Changing Perl headers in the following…" for file in $(ls $1*.pl) do echo $file sed 's/#!\/opt\/local/bin\/perl5/#![PERL5]/' $file > /dev/null # Perl Version: PERL5 done 任何有经验的人的帮助将是伟大的! 谢谢!