Почему вы все связываете с &&
? Если вы хотите остановить скрипт в случае возникновения ошибки, просто добавьте set -e
ниже шебанга. Он гарантирует, что скрипт прекращает выполнение, если команда возвращает состояние выхода, не равное 0 . Не используйте set -e
(читайте ссылку в комментариях).
Как я неправильно прокомментировал в предыдущем редактировании, похоже, что ваш код должен быть корректным с самого начала (thx @tripleee).
Я думаю, что ошибка происходит, потому что вы используете "
вместо '
. Ошибка возникает из-за того, что Bash сначала должен проанализировать строку, чтобы заменить переменные. Поскольку текущая оболочка не создала дочерний процесс, $!
пуст и, следовательно, ваш файл также. Попробуйте с одинарной цитатой:
#! /bin/bash
cd /mnt/go/src/github.com/something
pwd
bash -c 'nohup go run apps/something/main.go >> /var/logs/go/crash.log 2>&1 & echo $! > /var/run/something.pid'
cat /var/run/something.pid