Isso não responde à pergunta diretamente, mas eu questiono por que preciso para ter um arquivo com o pid
no nome. Se for simplesmente um nome de arquivo exclusivo que você está procurando, existem maneiras mais robustas de fazer isso. A maioria dos Unices tem um comando mktemp
(infelizmente isso não é POSIX). Usando o GNU mktemp
, você poderia fazer:
tmp_file=$(mktemp --tmpdir=. log_XXXXXXXXXX)
program_a >"$tmp_file"
Se você precisar acessar os arquivos em uma data posterior, talvez seja útil incluir a data / hora no nome do arquivo:
log_file=$(mktemp --tmpdir=. log_"$(date +%F_%T)".XXX)
program_a >"$log_file"
Se você estiver procurando garantir que apenas uma instância de um processo específico esteja em execução, no Linux você pode usar flock
:
(
flock -n 9 || { echo "program_a already running"; exit 1; }
program_a
) 9>/var/lock/program_a
Caso contrário, se você quiser que outro programa leia a saída de program_a
enquanto ainda está em execução, usar um arquivo é certamente um método de última instância. É muito melhor usar um pipe ou um pipe nomeado de acordo com a resposta da orion .