“ kill%1”失败,并在脚本中打印“ No such process”

问题描述 投票:0回答:1

我目前正在使用破折号作为主外壳。我试图编写一个应模仿等待的小功能,但带有一些文本。

这是最小的有效代码:

#!/bin/dash

wait() {
  echo Waiting...
  local pid="${1}"; shift
  local delay=.250
  while kill -0 "${pid}" 2>/dev/null; do
    echo Still waiting...
    sleep "${delay}"
  done
  echo Resuming
}

main() {
  sleep 3 &
  wait %1
}

main

如果将其复制粘贴到破折号外壳中,则可以看到代码正常运行。无论如何,如果您尝试将其保存在文件中,则不会。

经过一些故障排除后,我发现删除2>/dev/null,会看到错误消息:kill: No such processbut使用command wait "${pid}"只是在等待它。

例如:

#!/bin/dash

wait() {
  echo Waiting...
  local pid="${1}"; shift
  command wait "${pid}"
  echo Resuming
}

main() {
  sleep 3 &
  wait %1
}

main

也可以很好地用作文件脚本。

我不确定这段代码在哪里/什么地方出了问题,我尝试过的某些事情没有帮助。

在尝试将%1转换为其pid的试验中,但是[subshel​​l中的jobs -p %1(例如var="$(jobs -p %1)")严重失败。

任何提示?

shell kill dash-shell
1个回答
0
投票

作业控件在非交互式Shell中被禁用。用set -m激活它,或在shebang上附加-m,它将起作用。

Ex:

$ dash -c 'sleep 10 & kill %1'
dash: 1: kill: No such process

$ dash -m -c 'sleep 10 & kill %1'
© www.soinside.com 2019 - 2024. All rights reserved.