убить эквивалент %1 в рыбе

return закрывает исходные скрипты (и функции).

В вашем случае:

while getopts ":t:" opt; do
    case $opt in
        t)
            timelen="$OPTARG"
            ;;
        \?) printf "illegal option: -%s\n" "$OPTARG" >&2
            echo "$usage" >&2
            return 1
            ;;
        :) printf "missing argument for -%s\n" "$OPTARG" >&2
           echo "$usage" >&2
           return 1
           ;;
    esac
done

Пример теста:

$ cat script1.sh
echo script1
source./script2.sh
echo script1 ends
$ cat script2.sh
echo script2

while true; do
    return
done

echo script2 ends
$ bash script1.sh
script1
script2
script1 ends

Также источник script2.shработает правильно (без выхода из текущего сеанса оболочки):

$ source script2.sh
script2

4
27.07.2020, 10:32
1 ответ

Ваша команда сработала, но поскольку задание остановлено, оно не ответило на сигнал.

Из вашего примера, где это не сработало, попробуйте продолжить процесс с помощью fgили bgили принудительно завершите процесс с помощью kill -SIGKILL %1, и он завершится.

kill %1работает сразу в bash и zsh, потому что это встроенная команда в этих оболочках и отправляет SIGCONTв дополнение кSIGTERM(или указанному сигналу ).

4
18.03.2021, 23:17

Теги

Похожие вопросы