Извините, что пишу много лет спустя...
i3status отображается красным, только если ноутбук не подключен к сети. Если он заряжается, даже если вы ниже порога, он показывает белый цвет.
А может, проблема в этом :Попробуйте поместить color_bad = "#FF0000"
внутрь battery 0 {...}
. Если бы у меня был цвет _плохой только внутри general {...}
не работал... если я хорошо помню.
Вы могли бы использовать находку с котом.
find. -name file.txt -exec cat {} \;
Если будет возвращено содержимое файла, а если не найдено, просто вернется к подсказке. Либо бегите оттуда, где вы ищете, либо измените файл. на путь типа /tmp или что-то вроде
find /tmp/ -name file.txt -exec cat {} \;
Ваш первый пример будет делать то, что вы хотите.
Ваш второй пример не принесет ничего полезного, потому что у вас нет команды. Если вы пытаетесь представить перенаправление stdin в такой команде, как cat <file
, чтобы ошибка, возникающая, когда file
не существует, была скрыта, у вас есть несколько вариантов; вот три
[ -f file ] && cat <file # subject to race condition
( exec 2>/dev/null; cat <file ) # subshell discards all error output
( cat <file ) 2>/dev/null # subshell discards all error output
Если вы используете bash
, вы можете заменить (... )
на {...; }
и [... ]
на [[... ]]
.
How can I print the file contents if the file is found, but hide errors if it is not?
Сначала проверьте, существует ли файл?
if [ -f "$file" ]; then
cat "$file" # or whatever it is you're running
fi
или если он читаем
if [ -r "$file" ]; then...
Оба из них страдают от TOCTTOU (времени -из -проверки времени -из -использования )уязвимости , поскольку файл может быть удален или его разрешения изменились сразу после теста, до запуска cat
. Это, вероятно, все равно даст вам ошибку. Точно так же какой-то странный файл устройства или что-то подобное может казаться читаемым, но все равно выдавать ошибку при чтении.
Если у вас запущен конвейер, вы можете поместить туда cat
для чтения файла. Таким образом, проблема времени не существовала бы :
cat "$file" 2>/dev/null | whatever...
Я знаю, что вы не просили об этом, но cat
здесь не бесполезно. Он используется для отделения ошибок чтения $file
от любых других ошибок, которые может произвести правая -сторона конвейера.
Просто измените порядок и выполните перенаправление stderr на /dev/null
FIRST:
%% <file.txt 2>/dev/null
bash: file.txt: No such file or directory
%% 2>/dev/null <file.txt
%%
Имейте в виду, что перенаправления всегда выполняются слева направо; идея состоит в том, чтобы stderr уже был перенаправлен, когда выполняется ошибочное перенаправление.
Однако, насколько мне известно, только zsh
позволяет использовать только <file
как эквивалентcat file
(или more file
с учетом его опций NULLCMD
и READNULLCMD
).
Хотя bash и некоторые другие оболочки обманчиво поддерживают $(<file)
как особую форму подстановки команд, они поддерживают только эту форму, не более того:
bash% echo text > file
bash% <file
bash% echo $(<file)
text
bash% echo $(<file;<file)
bash%
В зш:
zsh$ <file
text
zsh$ <file >out
zsh$ <out
text
zsh$ echo $(<file;<file)
text text
Попробуйте это,
find. -maxdepth 1 -name file.txt -type f -readable -exec cat {} \;
-maxdepth 1
проверить только в текущем каталоге -name
Основа имени файла соответствует шаблону. -type -f
тип файла как обычный файл -readable
Соответствует файлам, которые доступны для чтения exec cat
выполните команду cat, которая удовлетворяет указанным выше условиям. Так мы не получим ошибку об отсутствии файла и нечитаемости.
ПРИМЕЧАНИЕ. :Все файлы доступны для чтения пользователю root.