código de saída do grep no trap onde o script é iniciado pelo serviço upstart

2

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").

    
por layka 17.09.2013 / 05:45

0 respostas