Eu escrevi um procedimento plsql usando o arquivo utl para criar arquivos no diretório temp no Unix.
Estou enviando os nomes dos arquivos para um script de shell para enviar esses arquivos e excluí-los após o envio do diretório temporário, mas quando duas pessoas executando a mesma solicitação com os mesmos arquivos, os arquivos são substituídos e excluídos pelo primeiro programa e o segundo programa não possui nenhum arquivo no diretório para o mail.
Eu decidi criar o arquivo names_request_id para criar nomes de arquivos exclusivos, mas meu requisito real é obter os arquivos com o mesmo nome sem request_id para a pessoa que está recebendo e-mail.
Eu criei Incompatibility para o programa com o mesmo programa, mas eles querem que eu tire a incompatibilidade para economizar tempo.
Quais outras opções eu tenho?
Para sua referência, copiei todo o meu shell script e adicionei o símbolo ####### para indicar a localização do código a ser modificado.
Os arquivos são movidos para o diretório criado e os nomes dos arquivos têm reuest_id-filename.extension, de modo que request_id e o '-' devem ser removidos e o nome do arquivo real deve estar lá.
nome do arquivo no banco de dados: 23456663-abcd.pdf
nome obrigatório do nome do arquivo: abcd.pdf
param='echo $*'
#getting input values
echo "params : $param"
v_temp='echo $param | cut -d '"' -f 1 '
v_temp='echo $v_temp | cut -d '=' -f 2 '
v_temp='echo $v_temp | cut -d ' ' -f 1 '
#now v_temp has the request_id
v_temp=MUILT_EMAIL3-$v_temp
echo "temp file is : $v_temp"
#split the parameter string with " as seperator
v_email_list='echo $param | cut -d '"' -f 8 '
v_file_list='echo $param | cut -d '"' -f 10 '
v_subject='echo $param | cut -d '"' -f 12 '
v_mail_content='echo $param | cut -d '"' -f 14 '
v_reply_to='echo $param | cut -d '"' -f 16 '
v_delete_attachment_files='echo "$1"|cut -d'"' -f18'
v_outputfile_path='echo "$1"|cut -d'"' -f20'
v_outputfile='echo "$1"|cut -d'"' -f22'
v_request_id='echo "$1"|cut -d'"' -f24'
#v_rename_file='echo $param | cut -d '"' -f 24 '
echo "email list :" $v_email_list
echo "file list :" $v_file_list
echo "subject :" $v_subject
echo "mail_content :" $v_mail_content
echo "reply_to :" $v_reply_to
echo "delete_attachment_files :" $v_delete_attachment_files
echo "outputfile_path :" $v_outputfile_path
echo "outputfile :" $v_outputfile
echo "request_id :" $v_request_id
v_email_list='echo $v_email_list |tr ";" " "'
v_file_list='echo $v_file_list |tr ";" " "'
pwd
cd /
mkdir /tmp/$v_request_id
cp $v_outputfile_path /tmp/$v_request_id/$v_outputfile
mv /tmp/$v_request_id* /tmp/$v_request_id/
cd /tmp/$v_request_id/
###### this is the place i need to rename the files that are moved to a request_id dir
################# mv -- "34178248-2640006.pdf" "${34178248-2640006.pdf}"
v_mail_content ='basename $v_mail_content'
cat $v_mail_content > /tmp/${v_temp}.tmp
echo "File List : $v_file_list"
for i in ${v_file_list}; do
echo "File to attach before parsing $i"
v_attachment_name='echo $i |awk '{ if ( index($1,":")> 0) { print substr($1,index($1,":")+1) } }''
v_attachment_file='echo $i |awk '{ if ( index($1,":")> 0) { print substr($1,1,index($1,":")-1) } }''
echo "Checking attachment name after parse :"$v_attachment_name
if [ "$v_attachment_name" = '' ]
then
v_attachment_name='basename $i'
v_attachment_file=$i
echo "base name is " $v_attachment_name
fi
/usr/bin/uuencode $v_attachment_file $v_attachment_name >> /tmp/${v_temp}.tmp
done
echo "Loop done"
if [ "${v_reply_to}" = '' ]
then
mailx -s "${v_subject}" "${v_email_list}" < /tmp/${v_temp}.tmp
#echo "something" | mailx -s "${v_subject}" ${v_email_list} < /tmp/${v_temp}.tmp
else
mailx -r "${v_reply_to}" -s "${v_subject}" "${v_email_list}" < /tmp/${v_temp}.tmp
#echo "something" | mailx -r "${v_reply_to}" -s "${v_subject}" ${v_email_list} < /tmp/${v_temp}.tmp
fi
echo "mailing done"
#delete the temporary files
echo "deleting file /tmp/${v_temp}.tmp"
rm /tmp/${v_temp}.tmp
if [ "${v_delete_attachment_files}" = 'Y' ]
then
echo "deleting attached files -start "
#Loop through to identify all the attachments and delete
for i in ${v_file_list}; do
echo $i
v_attachment_name='echo $i |awk '{ if ( index($1,":")> 0) { print substr($1,index($1,":")+1) } }''
v_attachment_file='echo $i |awk '{ if ( index($1,":")> 0) { print substr($1,1,index($1,":")-1) } }''
echo "Check :"$v_attachment_name
if [ "$v_attachment_name" = '' ]
then
v_attachment_name='basename $i'
v_attachment_file=$i
echo "base name is " $v_attachment_name
fi
echo "deleting file $v_attachment_file"
rm $v_attachment_file
done
#End Loop through to identify all the attachments and delete
fi
echo "rm done"