【问题标题】:How to run unix block command eg:if from perl如何从 perl 运行 unix 块命令,例如:if
【发布时间】:2018-02-28 01:54:11
【问题描述】:

如何从 perl 在 unix 中运行 if 块。 例如:

location="/home/shon";
    if [[ -f $location/sample.txt ]]
    then
        echo "file found...."
    else
       echo "Error in getting file"
       exit 255
   fi

来自 perl。

【问题讨论】:

  • 你试过什么?你有什么问题?向我们展示您的代码。如果您没有任何代码,那么 Stack Overflow 可能不适合您提出问题。
  • 是的,我试过了。请在下面找到代码,system("location='/home/shon'; if [[ -f $location/sample.txt ]] then echo 'file found. ...'; else echo '获取文件时出错'; 退出 255 fi"); OP:意外标记“then”附近的语法错误
  • edit your queestion 将代码格式化为代码,以便于阅读。如果你想让一大群陌生人阅读和理解你的代码,那么让他们尽可能简单是礼貌的做法。
  • #! /usr/bin/perl 我的 $location ="/home/shon/sample.txt"; if (-f $location) { print "文件找到...."; } else { print "获取文件时出错"; }
  • @rolindroy:这看起来像是问题的答案。为什么不将其发布为答案而不是评论?

标签: perl unix command-line


【解决方案1】:

正如建议的那样,这段代码很容易翻译成 perl。假设你有更复杂的东西,你可以生成一个 shell 来运行它:将 shell 代码放在 quoted heredoc 中,这样 perl 就不会替换 shell 变量。

system 'bash', '-c', <<'END_SHELL_CODE';
    location="/home/shon"
    if [[ -f $location/sample.txt ]]; then 
        echo "file found...." 
    else 
        echo "Error in getting file" 
        exit 255 
    fi
END_SHELL_CODE

【讨论】:

  • 谢谢@glenn_jackman:这正是我要找的...
  • "spawn" 只是意味着开始一个新进程。在这里,我们使用 perl 的 system 函数来启动带有一些参数的“bash”。
  • Re "将 shell 代码放在带引号的 heredoc 中,这样 perl 就不会替换 shell 变量。",可以为此使用单引号文字。 &lt;&lt;'END_SHELL_CODE' 实际上所做的就是让你不必逃离 \
  • @ikegami 如何根据您的建议替换 unix 脚本中的 perl 变量。例如:#! /usr/bin/perl @cmds = @ARGV; chomp($schedule_id); system 'bash', '-c', &lt;&lt;'END_SHELL_CODE'; @cmds END_SHELL_CODE print "shell executed:@cmds\n";
【解决方案2】:

试试这个

#! /usr/bin/perl
my $location ="/home/shon/sample.txt";
if (-f $location)
{
  print "file found....";
}
else
{
 print "Error in getting file";
}

【讨论】:

  • 我的要求是传递给 wrapper_script.pl 的 unix 命令应该执行相同的操作。提供的答案是与问题中给出的 unix 脚本等效的 perl 脚本。我需要从 perl 运行 unix 脚本作为上面给出的示例。
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 2019-10-15
  • 1970-01-01
  • 2011-01-16
相关资源
最近更新 更多