当我以开头的点开始脚本时,终端关闭

时间:2018-12-03 14:45:47

标签: 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

问题是当我这样启动时:〜$。 color.sh arg或不带参数的它将关闭。我知道原因是退出。有什么办法可以纠正我的代码,以便我可以在开始时用点启动脚本,并且执行后终端不会关闭?谢谢!附言不要告诉我像这样开始它。/script

2 个答案:

答案 0 :(得分:3)

将所有exit替换为return。 源脚本中的return甚至可以使用退出代码:

$ . <(echo "echo before; return 0; echo after")
before
$ echo $?
0
$ . <(echo "echo before; return 7; echo after")
before
$ echo $?
7

答案 1 :(得分:0)

使用点来运行脚本时,您是在“寻找”它,这意味着解释器将在当前环境的上下文中读取并执行该脚本中的所有命令,而不会产生子外壳,就像您键入了每个外壳一样你自己

这就是为什么如果您获取它,则可以在脚本中设置变量,该变量在运行后仍会保留,而在子shell中运行则会封装它们,并且在脚本结束时它们会消失。

因此,如果您提供的脚本命中exit,则会导致调用环境退出。按照建议的Socowi使用return。