【问题标题】:pgrep inside bash script not workingbash脚本中的pgrep不起作用
【发布时间】:2018-08-30 04:32:08
【问题描述】:

我正在尝试将pgrep -f "instance" 输出保存在 bash 脚本的变量中。由于某种原因它不起作用: 这是代码:

function check_running() {
  local component_identifier=$1
  local process_check=`get_component_param_value $component_identifier $process_check_col | tr -d '\n'`
  if [ "$process_check" != "n/a" ]; then
    log "process to check: ****""$process_check""****"
    pid=`pgrep -f $process_check`
    log "pid: " $pid
  fi
}

我尝试了不同的方法,用单引号和双引号。 此外,这都不起作用:

pid=$(pgrep -f "$process_check")

请注意 process_check 变量正确返回并且肯定可以工作。 我认为问题在于该字段位于行尾并且可能包含\n 字符,这就是我在 process_check var 中添加tr 的原因。

有什么想法吗?

这是日志的输出:

process to check: ****"instance"****
pid:

【问题讨论】:

  • ps -ef | grep \"instance\" 是否表明您确实有一个正在运行的进程在其命令行某处包含单词“instance”(带引号)?我怀疑你那里有一些额外的引号,可能来自get_component_param_value的输出...
  • 我尝试使用单引号、无引号或双引号,但始终相同。无论如何,命令 pgrep -f "instance" 在服务器上完美运行,我希望这会正常运行即使在命令行中。如果我打印命令并且没有多余的引号

标签: bash unix grep


【解决方案1】:

我找到了回答这个问题的方法:

echo `ps -ef | grep "$process_check" | grep -wv 'grep\|vi\|vim'` | awk '{print $2}'

我希望其他人会觉得这很有用

【讨论】:

    【解决方案2】:

    嗯,就我而言,它不喜欢我试图传递的论点。

    pgrep -f "example" # working
    pgrep -f "-f -N example" # not working
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 2011-03-02
      • 2011-09-04
      • 1970-01-01
      相关资源
      最近更新 更多