【问题标题】:How to execute linux command from rakefile?如何从 rakefile 执行 linux 命令?
【发布时间】:2023-04-05 17:48:01
【问题描述】:

我有以下命令:

ps -ef | awk '{if( $8~"java" || $8~"ruby" || $8~"god"){printf("Killing : %s \n",$2);{system("kill -9 "$2)};}};'

我如何从 rakeFile 执行这个 linux 命令。

我试过了:

task :kill_process do
  `ps -ef | awk '{if( $8~"java" || $8~"ruby" || $8~"god"){printf("Killing : %s \n",$2);{system("kill -9 "$2)};}};'`
end

但是在执行时它给出了错误:

awk: cmd. line:1: {if( $8~"java" || $8~"glassfish" || $8~"ruby" || $8~"god" || $8~"couch"){printf("Killing : %s 
awk: cmd. line:1:                                                                                 ^ unterminated string
awk: cmd. line:1: {if( $8~"java" || $8~"glassfish" || $8~"ruby" || $8~"god" || $8~"couch"){printf("Killing : %s 
awk: cmd. line:1:                                                                                 ^ syntax error

我找到了解决问题的方法: 感谢@Yurii Verbytskyi

task :kill_process do
   system %q(ps -ef | awk '{if( $8~"java" || $8~"ruby" || $8~"god"){printf("Killing : %s \n",$2);{system("kill -9 "$2)};}}') 
end

【问题讨论】:

  • 这个命令是直接在命令行运行的吗?它似乎包含一些 ruby​​ 方法调用。
  • 这可以直接在命令行上正常工作。
  • 你可以试试ruby-doc.org/core-2.7.1/Kernel.html#method-i-system task :kill_process do system %q(ps -ef | awk '{if( $8~"java" || $8~"ruby" || $8~"god" ){printf("Killing : %s \n",$2);}}') end * 我删除了 kill 命令以在本地测试它)
  • @YuriiVerbytskyi 谢谢,它正在工作。你能告诉我这里的 %q 是什么吗
  • simpleror.wordpress.com/2009/03/15/q-q-w-w-x-r-s 这是另一种单引号语法。刚刚使用它,因为您的命令字符串中存在不同的引号

标签: ruby linux rake-task rakefile


【解决方案1】:

试试这个。

task :kill_process do
   system("ps -ef | awk '{if( $8~\"java\" || $8~\"ruby\" || $8~\"god\"){printf(\"Killing : %s \\n\",$2);{system(\"kill -9 \"$2)};}};'")
end

我们需要转义特殊字符,例如\n

【讨论】:

  • 如果我不想要系统方法的返回值怎么办。有什么办法,不获取返回值?
  • 在这里您也可以使用您的代码。但是你的代码的问题是转义特殊字符。如果你这样做,你的代码也可以正常工作。
猜你喜欢
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2018-12-09
  • 1970-01-01
  • 2019-08-04
  • 2021-08-19
  • 2023-03-06
相关资源
最近更新 更多