Экранирование "<

На тривиальном уровне я не совсем уверен, почему этого недостаточно.

[[ -s "/scripts/pid_$DATE.txt" ]] && kill $(cat "/scripts/pid_$DATE.txt")

Или нужно убить только первого, а остальных оставить в покое?

if [[ -s "/scripts/pid_$DATE.txt" ]] 
then
    while IFS= read -r pid
    do
        kill "$pid" && break
    done <"$scripts/pid_$DATE.txt"
fi

В обоих случаях предполагается, что сценарий имеет достаточные привилегии, чтобы сигнализировать целевым процессам, и что файл "$scripts/pid_$DATE.txt"либо не существует, либо является доверенным и датирован с -по -.

1
20.04.2021, 16:43
1 ответ

EOF оценивается, когда функция определена; конечно, Bash пропускает остальную часть скрипта, пока не найдет соответствующий терминатор EOF.

То, что вы, похоже, ищете, это способ использования стандартного ввода через конкретный токен. Обычный способ сделать это — просто напечатать ваше сообщение и закончить его клавишей ctrl -D (или любым другим способом, настроенным вашим терминалом для использования в качестве сигнала конца файла ).

commitml() {
   git commit "$@" -F-
}

Вы можете использовать это как commitml <<EOF, если хотите, конечно; или, возможно, переименуйте функцию в _commitmlи установите

alias commitml='_commitml <<EOF'

Это один из немногих допустимых случаев использования псевдонима над функцией. --Текст в одинарных кавычках оценивается только тогда, когда вы действительно используете псевдоним. Любые токены после commitmlбудут переданы в "$@"(. Обратите внимание также на использование этой правильно заключенной в кавычки переменной вместо цитирования -багги$*).

4
28.04.2021, 22:53

Теги

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