我想使用shell脚本来检查它是否是交互式的 . 如果是这样,它应该生成 fish 并在后台继续其余的脚本 . 否则,它不应运行 fish 并继续运行脚本的其余部分 .

我如何检查shell是否是交互式的:

#!/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 .