ing*_*oxd 3 shell kill dash-shell
我目前使用 dash 作为主 shell。
我尝试编写一个应该模仿等待的小函数,但带有一些文本。
这是一个最小的工作代码:
#!/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
Run Code Online (Sandbox Code Playgroud)
如果将其复制粘贴到破折号外壳中,您可以看到代码运行得很好。
无论如何,如果您尝试将其保存在文件中,则不会。
经过一些故障排除后,我发现删除2>/dev/null,您可以看到一条错误消息:kill: No such process,但使用command wait "${pid}"它只是等待它。
例如:
#!/bin/dash
wait() {
echo Waiting...
local pid="${1}"; shift
command wait "${pid}"
echo Resuming
}
main() {
sleep 3 &
wait %1
}
main
Run Code Online (Sandbox Code Playgroud)
作为文件脚本也可以很好地工作。
我不确定这段代码中的错误在哪里/什么地方,并且我尝试过的一些方法没有帮助。
在试验中,我尝试转换%1为其 pid,但jobs -p %1在子 shell(例如var="$(jobs -p %1)")中失败严重。
有什么建议吗?
在非交互式 shell 中禁用作业控制。使用set -m或通过附加-m到 shebang 来启用它,它就会起作用。
例子:
$ dash -c 'sleep 1 & kill %1 && echo success'
dash: 1: kill: No such process
$ dash -m -c 'sleep 1 & kill %1 && echo success'
success
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2166 次 |
| 最近记录: |