首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux中的Perl脚本bash脚本

Linux中的Perl脚本bash脚本
EN

Stack Overflow用户
提问于 2013-02-20 20:42:47
回答 1查看 486关注 0票数 0

我正在阅读其中一个bash脚本,其中我遇到了以下几行。我猜不出下面这几行到底在做什么?谁能给我一些关于这些行到底在做什么的提示。我已经分别执行了这些行,但没有输出。我甚至尝试过使用断点。

代码语言:javascript
复制
ssh $HOST bash -e <<
'END' 2>&1 |
 /usr/bin/perl -ne
 'BEGIN { $|=1 } ; 

if (/(bmake|create_dirs\.sh)\[\d+\] Leaving/)
 { --$indent };
 print " "x($indent * 4), "$_" ;
 if (/(bmake|create_dirs\.sh)\[\d+\] Entering/) { ++$indent }'

我期待着任何善意的回复。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-20 20:53:08

在“离开”行,缩进量减少,在“进入”行,缩进量增加。详细说明:

代码语言:javascript
复制
/usr/bin/perl -ne

perl标志在脚本周围放置了一个while(<>)循环,这基本上使-n从标准输入或参数文件中读取。

代码语言:javascript
复制
BEGIN { $|=1 }

自动刷新处于启用状态。

代码语言:javascript
复制
if (/(bmake|create_dirs\.sh)\[\d+\] Leaving/) { --$indent };

这个正则表达式在这里查找如下代码行

代码语言:javascript
复制
bmake[9] Leaving
create_dirs.sh[2] Leaving

找到后,$indent变量将减1。

代码语言:javascript
复制
print " "x($indent * 4), "$_" ;

这将打印一个空格,重复4* $indent次,后跟输入行。

代码语言:javascript
复制
if (/(bmake|create_dirs\.sh)\[\d+\] Entering/) { ++$indent }

此行以与上面相同的方法增加缩进。

更多关于正则表达式的解释(参见here,不过我从这个站点上清理了语法):

代码语言:javascript
复制
NODE                     EXPLANATION
--------------------------------------------------------------------------------
  (                        group and capture to $1:
--------------------------------------------------------------------------------
    bmake                  literal string 'bmake'
--------------------------------------------------------------------------------
   |                       OR
--------------------------------------------------------------------------------
    create_dirs\.sh        literal string 'create_dirs.sh'
--------------------------------------------------------------------------------
  )                        end of $1
--------------------------------------------------------------------------------
  \[                       literal string '['
--------------------------------------------------------------------------------
  \d+                      digits (0-9) (1 or more times (matching
                           the most amount possible))
--------------------------------------------------------------------------------
  \] Leaving               literal string '] Leaving'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14980132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档