簡體   English   中英

當我獲取腳本時終端關閉(在開始時使用點運行)

[英]Terminal closes when I source my script (run with dot at the start)

這是我的代碼:

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

或者沒有爭論,它只是關閉。 我知道原因是exit 有什么方法可以更正我的代碼,這樣我就可以在開始時用點啟動一個腳本,而終端在執行后不會關閉? 我不想這樣開始: ./script

return替換所有exit 在源腳本中return甚至可以使用退出代碼:

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

當您使用點來運行腳本時,您是在“采購”它,這意味着解釋器在當前環境的上下文中讀取並執行該腳本中的所有命令,而不產生子shell,就好像您自己鍵入了每個命令一樣。

這就是為什么如果你獲取它,你可以在腳本中設置變量,在它運行后會保留,而在子shell中運行它會封裝它們,當腳本結束時它們會消失。

因此,如果您獲取一個點擊exit的腳本,它會導致調用環境退出。 按照Socowi 的建議使用 return。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM