Recentemente eu encontrei um problema no ubuntu upstart e armadilha no shell Bash.
Eu uso o Ubuntu 12.04. O script upstart (/etc/init/player.conf) é:
start on (local-filesystems and runlevel [2345])
stop on runlevel [06]
script
/tmp/test.sh
end script
O /tmp/test.sh
é:
#!/bin/bash
TOKEN="token"
TOKEN_FILE="/tmp/token"
OUTPUT_FILE="/tmp/test_exit"
func()
{
grep "$TOKEN" "$TOKEN_FILE"; echo $? >> "$OUTPUT_FILE"; exit 0
}
trap 'trap "" INT TERM QUIT EXIT; func' INT TERM QUIT EXIT
rm -f "$OUTPUT_FILE"
echo "$TOKEN" > "$TOKEN_FILE"
grep "$TOKEN" "$TOKEN_FILE"; echo $? >> "$OUTPUT_FILE";
sleep 1000
exit 0
O procedimento de teste:
$sudo service player start
$sudo service player stop
$cat /tmp/test_exit
0
2
A minha pergunta é, porque o segundo resultado é 2, uma vez que o arquivo (/ tmp / token) não é alterado, o grep deve encontrar a string ("token") naquele arquivo ("/ tmp / token").