На тривиальном уровне я не совсем уверен, почему этого недостаточно.
[[ -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"
либо не существует, либо является доверенным и датирован с -по -.
EOF оценивается, когда функция определена; конечно, Bash пропускает остальную часть скрипта, пока не найдет соответствующий терминатор EOF
.
То, что вы, похоже, ищете, это способ использования стандартного ввода через конкретный токен. Обычный способ сделать это — просто напечатать ваше сообщение и закончить его клавишей ctrl -D (или любым другим способом, настроенным вашим терминалом для использования в качестве сигнала конца файла ).
commitml() {
git commit "$@" -F-
}
Вы можете использовать это как commitml <<EOF
, если хотите, конечно; или, возможно, переименуйте функцию в _commitml
и установите
alias commitml='_commitml <<EOF'
Это один из немногих допустимых случаев использования псевдонима над функцией. --Текст в одинарных кавычках оценивается только тогда, когда вы действительно используете псевдоним. Любые токены после commitml
будут переданы в "$@"
(. Обратите внимание также на использование этой правильно заключенной в кавычки переменной вместо цитирования -багги$*
).