shell - 如何将外壳分叉到前台而不是后台?
问题描述
我想使用 shell 脚本来检查它是否是交互式的。如果是这样,它应该生成一个fish
并在后台继续脚本的其余部分。否则,它不应该运行fish
并继续运行脚本的其余部分。
我如何检查外壳是否是交互式的:
#!/bin/sh
case $- in
*i*) echo "interactive" ;;
*) echo "non-interactive" ;;
esac
现在,如果它是交互式的,我想在前台生成一个不同的 shell ,并继续在后台运行脚本的其余部分。
在这个例子中,它会等到我退出fish
运行echo "continue...
。
#!/bin/sh
case $- in
*i*) fish ;;
*) ;;
esac
echo "continue..."
我尝试过的事情:
- 如果我使用
fish &
,脚本的其余部分在前台fish
运行并在后台运行。 - 如果我使用
fish
,脚本会在前台运行 fish,但只有在fish
shell 退出后才会继续脚本的其余部分。 - 如果我使用
exec fish
,脚本在前台运行 fish,但不运行脚本的其余部分,因为fish
替换了父级。
请注意,我使用的是脚本dash
而不是 bash
脚本,因此它不应包含任何 bashisms。
解决方案
推荐阅读
- android-animation - Set specific Fraction or PlayTime for Child Animations in AnimatorSet
- c# - Scroll Rect 仅由于鼠标移动而滚动。如何解决?
- wordpress - 在 wordpress 中使用自定义表中的自定义字段
- r - 在实现 for 和 while 循环以及如何添加要在选项卡面板中显示的多个输出时遇到问题
- c++ - 在无序映射中使用 string_view 作为键的安全方法
- swagger - 如何覆盖 OpenAPI 中的示例以保存只读字段道具?
- node.js - 尝试安装 node@9.11.2 的问题
- python - 将按钮添加到文件列表
- angular - p-table 过滤器标题中的primeng p-calendar,允许使用手动输入日期并清除它
- c# - JetBrains Rider 删除了前导制表符和空格