Каким-то образом это Мне пришло в голову, что это могло быть вызвано недавно установленной мной утилитой unclutter
. Оказывается, виноват в этом. Узнав об этом, я обнаружил, что о проблеме уже сообщалось, например здесь: https://askubuntu.com/questions/3022/weird-mouse-problem .
Кроме того, я нашел альтернативу под названием hhpc
: https://github.com/Aktau/hhpc . Собираюсь попробовать.
Вы можете удалить файл после запуска, если команда не удалась, с помощью
myAPICommand parameters > myFile.txt || rm myFile.txt
Но я бы предложил вместо этого стереть файл:
myAPICommand parameters >| myFile.txt
См. Что такое операторы управления и перенаправления оболочки? для получения подробной информации.
У вас должен быть установлен "noclobber", проверьте следующий пример:
$ echo 1 > 1 # create file
$ cat 1
1
$ echo 2 > 1 # overwrite file
$ cat 1
2
$ set -o noclobber
$ echo 3 > 1 # file is now protected from accidental overwrite
bash: 1: cannot overwrite existing file
$ cat 1
2
$ echo 3 >| 1 # temporary allow overwrite
$ cat 1
3
$ echo 4 > 1
bash: 1: cannot overwrite existing file
$ cat 1
3
$ set +o noclobber
$ echo 4 > 1
$ cat 1
4
"noclobber" предназначен только для перезаписи, но вы все равно можете добавить его:
$ echo 4 > 1
bash: 1: cannot overwrite existing file
$ echo 4 >> 1
Чтобы проверить, установлен ли у вас этот флаг, вы можете ввести echo $-
и посмотреть, установлен ли у вас флаг C
(илиset -o |grep clobber
).
Есть требования? Вы можете просто сохранить вывод в переменной, а затем проверить, пуста ли она. Проверьте следующий пример (обратите внимание, что способ проверки переменной требует точной настройки в соответствии с вашими потребностями, в примере я не цитировал его и не использовал что-либо вроде ${cmd_output+x}
, который проверяет, установлена ли переменная, чтобы избежать записи файла содержащие только пробелы.
$ cmd_output=$(echo)
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e '\n\n\n')
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e ' ')
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e 'something')
$ test $cmd_output && echo yes || echo no
yes
$ cmd_output=$(myAPICommand.exe parameters)
$ test $cmd_output && echo "$cmd_output" > myFile.txt
Пример без использования одной переменной, содержащей весь вывод:
log() { while read data; do echo "$data" >> myFile.txt; done; }
myAPICommand.exe parameters |log
Можно создать сценарий для запуска myAPICommand.exe, но сначала удалить файл myFile.txt, если он существует. Тогда вам не придется постоянно выполнять команду rm для очистки.
Нравится:
if [ -e myFile.txt ]
then
rm myFile.txt && myAPICommand.exe
else
Вы также можете сделать так, чтобы ваша команда убирала за собой. Если файл пуст, добавьте что-то вроде следующего.
Нравится:
if [ -s myFile.txt ]
then
EXIT 0
else
rm myFile.txt && EXIT 1
fi