【问题标题】:Difficulty running a Perl script as a Bash alias难以将 Perl 脚本作为 Bash 别名运行
【发布时间】:2012-09-15 11:48:59
【问题描述】:

为了格式化我的 apache error_log 以便看起来更愉快,我编写了一个快速而肮脏的 perl 脚本。

tail -f /var/log/apache2/error_log | perl -ne 
  '($timeStamp, $error, $hostName, $message) = 
      /^\[([^\]]+)\] \[([^\]]+)\] (?:\[client ([^\]]+)\])?\s*(.*)$/i; # Parse log
   ($day, $month, $date, $time, $year) = 
      $timeStamp =~ m/(\S*) (\S*) (\S*) (\S*) (\S*)$/; # Extract the timestamp
   $message =~ s/, referer: (.*)$/\./;  # Strip the referer references
   $message =~ s/\\n/\n/g; # Replace literal new lines to expand object dumps
   print $time . " " . $date . " " . $month . " | " . $message ."\n";'

我想将脚本添加到 Bash 别名中,以便可以从终端轻松调用它。

例如

alias te=tail -f /var/log/apache2/error_log | perl -ne '($timeStamp, $error, $hostName, $message) = /^\[([^\]]+)\] \[([^\]]+)\] (?:\[client ([^\]]+)\])?\s*(.*)$/i; ($day, $month, $date, $time, $year) = $timeStamp =~ m/(\S*) (\S*) (\S*) (\S*) (\S*)$/; $message =~ s/, referer: (.*)$/\./; $message =~ s/\\n/\n/g; print $time . " " . $date . " " . $month . " | " . $message ."\n";'

显然,转义引号开始变得混乱。我还尝试将 perl 脚本放在它自己的文件中并作为别名运行,但我想避免为了可移植性而不得不在 .bash_profile 文件之外运行脚本。

如何将 perl 脚本用作 bash 别名/函数?或者我是从完全错误的方向来的?

【问题讨论】:

    标签: perl apache bash alias


    【解决方案1】:

    您绝对应该使用函数而不是别名:

    function te ()
    {
        tail -f /var/log/apache2/error_log \
        | perl -ne \
           '($timeStamp, $error, $hostName, $message) = 
              /^\[([^\]]+)\] \[([^\]]+)\] (?:\[client ([^\]]+)\])?\s*(.*)$/i; # Parse log
            ($day, $month, $date, $time, $year) = 
              $timeStamp =~ m/(\S*) (\S*) (\S*) (\S*) (\S*)$/; # Extract the timestamp
            $message =~ s/, referer: (.*)$/\./;  # Strip the referer references
            $message =~ s/\\n/\n/g; # Replace literal new lines to expand object dumps
            print $time . " " . $date . " " . $month . " | " . $message ."\n";
           '
    }
    

    【讨论】:

    • 感谢您的快速回复!这就像做梦一样!我之前尝试过,但我一定有一些时髦的 .alias 宿醉优先考虑。
    【解决方案2】:

    改变

    alias te=tail -f /var/log/apache2/error_log | perl -ne '...'
    

    alias te='tail -f /var/log/apache2/error_log | perl -ne '\''...'\'''
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      相关资源
      最近更新 更多