1

У меня проблемы с удалением файла в скрипте bash. Я видел другой пост с той же проблемой, но ни одно из этих решений не решило мою проблему. Сценарий bash является контрольной проверкой OP5 и вызывает процесс Expect, который сохраняет временный файл на локальный диск, с которого читает сценарий bash. После того, как он прочитал файл и проверил его состояние, я хотел бы удалить временный файл. Я довольно новичок в написании сценариев, поэтому мой сценарий может быть не таким оптимальным, как мог бы быть. В любом случае это делает работу, кроме удаления файла, как только это будет сделано. Я выложу весь код ниже:

#!/bin/bash

#GET FLAGS
while getopts H:c:w: option
do
case "${option}"
in
        H) HOSTADDRESS=${OPTARG};;
        c) CRITICAL=${OPTARG};;
        w) WARNING=${OPTARG};;
esac
done

./expect.vpn.check.sh $HOSTADDRESS

#VARIABLES
VPNCount=$(grep -o '[0-9]\+' $HOSTADDRESS.op5.vpn.results)

# Check if the temporary results file exists
if [ -f $HOSTADDRESS.op5.vpn.results ]
then
# If the file exist, Print "File Found" message
echo Temporary results file exist. Analyze results.

else # If the file does NOT exist, print "File NOT Found" message and send message to OP5
echo Temporary results file does NOT exist. Unable to analyze.
# Exit with status Critical (exit code 2)
exit 2
fi

if [[ "$VPNCount" > $CRITICAL ]]
then
# If the amount of tunnels exceeds the critical threshold, echo out a warning message and current threshold and send warning to OP5
echo "The amount of VPN tunnels exceeds the critical threshold - ($VPNCount)"
# Exit with status Critical (exit code 2)
exit 2

elif [[ "$VPNCount" > $WARNING ]]
then
# If the amount of tunnels exceeds the warning threshold, echo out a warning message and current threshold and send warning to OP5
echo "The amount of VPN tunnels exceeds the warning threshold - ($VPNCount)"
# Exit with status Warning (exit code 1)
exit 1
else
# The amount of tunnels do not exceed the warning threshold.
# Print an OK message
echo OK - $VPNCount
# Exit with status OK
exit 0
fi

#Clean up temporary files.
rm -f $HOSTADDRESS.op5.vpn.results

Я пробовал следующие решения:

  • Создайте отдельную переменную с именем TempFile, которая определяет файл. И укажите это в команде rm.

  • Я попытался создать другой оператор if, похожий на тот, который я использую, чтобы убедиться, что файл существует, и затем найти имя файла.

  • Я попытался добавить полное имя файла (без переменных, просто текст файла)

Я могу:

  • Удалите файл, используя полное имя как в отдельном скрипте, так и непосредственно в CLI.

Есть ли в моем скрипте что-то, что блокирует файл, который мешает мне удалить его? Я не уверен, что попробовать дальше.

Заранее спасибо!

1 ответ1

1

Когда вы "выходите", он завершается, и последняя строка вашего скрипта не достигается.

Первое решение: переместите последнюю строку под "echo Временный файл результатов существует. Анализировать результаты. "Как это место, где файл существует и анализируется ...

Но если вы хотите стереть этот файл в каждом случае, и у вас нет проблем с выполнением команды rm при каждом выходе (т. Е. Независимо от причины выхода из программы), вместо последней строки определите (в начале начала сценарий!) функция, которая вызывается при выходе из программы (используя "trap thefonction EXIT": значение: вызывайте "thefonction", когда вы EXIT (или программа получила ctrl+c)).

function onexit {
   # Your cleanup code here
   rm -f $HOSTADDRESS.op5.vpn.results
}

trap onexit EXIT

Но вам нужно убедиться, что вы определили ловушку в нужное время (и что HOSTADDRESS определяется, когда вы это делаете!)

Обратите внимание, что если вы «убьете -9» в программе, у нее вообще не будет времени использовать эту ловушку (kill -9 должен использоваться только тогда, когда обычное уничтожение не работает, так как не позволяет программе время использовать очистку и т.д ...)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .