2017-01-26 7 views
2

Мне сложно понять, почему следующий случай оставит файл «lock», присутствующий в файловой системе.Почему этот файл не удаляется?

файл script:

#!/bin/sh 
set -e 
run-parts sub &> /dev/null 

файл sub/subscript:

#!/bin/sh 
set -e 

# Exit if another job is running. 
[ -e ./lock ] && exit 0 

trap "rm -f ./lock; exit" 0 1 2 5 15 

touch ./lock 
echo "test" 

Когда сейчас работает run-parts --report . в папке, где script является, почему это выход с файлом lock настоящее время?

То, что я думаю, что он должен делать:

1) ищет работоспособные сценарии в текущей папке (находит script)

2) он будет работать script и внутри него будет работать еще Заурядные части экземпляр, который находит сценарий sub/subscript и запустить этот один

3) файл sub/subscript создаст файл lock и должны удалить его усиления при возникновении сигналов 0, 1, 2, 5 или 15.

То, что я узнал до сих пор:

1) Удаление &> /dev/null удалит файл блокировки

2) Удаление --report также удалить файл блокировки

Однако в моем случае, это две резолюции не являются опцией, поскольку я не являюсь хранителем кода.

Из того, что я понимаю, ни один из указанных сигналов не будет срабатывать. Почему это?

ОС: Debian Jessie

+0

Вместо '&>/dev/null', попробуйте перенаправить на файл, например' &>/tmp/out', и посмотреть, содержит ли вывод что-нибудь полезное? –

+0

К сожалению, файл блокировки все еще присутствует и создается пустой файл '/ tmp/out'. – 1FpGLLjZSZMx6k

+0

Я подозреваю, что «ловушка» не вызывается при определенных обстоятельствах. Это помогает, если вы можете добавить дополнительный 'touch/tmp/trap.stat' в код' trap', чтобы проверить, действительно ли это так. Если вызов 'trap' является проблемой, это может быть проблемой конкретной ОС. – codeforester

ответ

0

Итак ...

#!/bin/sh 
set -e 

# Exit if another job is running. 
[ -e ./lock ] && exit 0 

Во-первых, изменить #!/bin/sh к #!/bin/bash, так как это Баш вопрос. Вероятно, вы используете вкус Linux, который связывает/bin/sh с/bin/bash, но это не так. Затем, если вы запустите это, и файл блокировки существует, он выйдет и покинет файл.

trap "rm -f ./lock; exit" 0 1 2 5 15 

touch ./lock 
echo "test" 

Затем вышеуказанное выполняется, если замка там не было. Вы касаетесь файла, проверяете эхо и удаляете его. Вы не упоминали, что вы еще раз видите «тест». Кажется, он работает по назначению.