当我获取脚本时终端关闭(在开始时使用点运行)

Mak*_*Mak 1 linux bash

这是我的代码:

#!/bin/bash 
if [[ $1 = "" ]]; then
    exit 0
fi
array=($(cat $1))
let b=${#array[@]}-1
count=0
for i in {1..7}; do
    for j in {30..37}; do
        for n in {40..47}; do
            if [[ $count -gt $b ]]; then
                printf '\n'
                printf '\e[0m'
                exit 1
            fi
            printf '\e[%s;%s;%sm%-5s' "$i" "$j" "$n" "${array[$count]}"
            printf '\e[0m'
            let count=$count+1
        done
        printf '\n'
    done
done
#printf '\n'
printf '\e[0m'
exit 0
Run Code Online (Sandbox Code Playgroud)

问题是当我这样开始时

#!/bin/bash 
if [[ $1 = "" ]]; then
    exit 0
fi
array=($(cat $1))
let b=${#array[@]}-1
count=0
for i in {1..7}; do
    for j in {30..37}; do
        for n in {40..47}; do
            if [[ $count -gt $b ]]; then
                printf '\n'
                printf '\e[0m'
                exit 1
            fi
            printf '\e[%s;%s;%sm%-5s' "$i" "$j" "$n" "${array[$count]}"
            printf '\e[0m'
            let count=$count+1
        done
        printf '\n'
    done
done
#printf '\n'
printf '\e[0m'
exit 0
Run Code Online (Sandbox Code Playgroud)

或者没有争论,它就关闭。我知道原因是exit。有什么方法可以纠正我的代码,以便我可以在开始时使用点启动脚本并且终端在执行后不会关闭?我不想这样开始:./script

Soc*_*owi 5

全部替换exitreturn. return在源脚本内部甚至可以使用退出代码:

$ . <(echo "echo before; return 0; echo after")
before
$ echo $?
0
$ . <(echo "echo before; return 7; echo after")
before
$ echo $?
7
Run Code Online (Sandbox Code Playgroud)