Как обнаружить, “находят” ли найденными какими-либо соответствиями?

Для GTK +-3 приложения можно осуществить темный вариант темы использование GtkSettings' settings.ini:

$ mkdir -p $HOME/.config/gnome-terminal/gtk-3.0 # the path before gtk-3.0 is arbitrary
$ cat >> $HOME/.config/gnome-terminal/gtk-3.0/settings.ini << EOF
[Settings]
gtk-application-prefer-dark-theme=true
EOF
$ echo 'alias gnome-terminal="XDG_CONFIG_HOME=$HOME/.config/gnome-terminal gnome-terminal" >> $HOME/.bashrc

Для non-GTK + приложения как vnc, можно все еще осуществить темные художественные оформления окна путем установки _GTK_THEME_VARIANT X свойств типа UTF8_STRING кому: dark. Сделать это с xprop, введите следующую команду и нажмите окно впоследствии:

$ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark"

xprop может также выбрать окна WM_NAME свойство (маркировка строки заголовка) или идентификатором окна:

$ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark" -name "Spotify Premium - Linux Preview"
$ xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT "dark" -id 0x380002b

Для получения идентификаторов окна и имен использовать xlsclients -l.

16
30.01.2017, 16:51
4 ответа

Если Вы знаете, что у Вас есть GNU, находят, используют -quit заставить его остановиться после первого соответствия.

Портативно, передайте вывод по каналу find в head -n 1. Тот путь find умрет от поврежденного канала после нескольких соответствий (когда это будет заполнено headвходной буфер).

Так или иначе Вам не нужно wc чтобы протестировать, пуста ли строка, оболочка может сделать это самостоятельно.

if [ -n "$(find … | head -n 1)" ]; then …
17
27.01.2020, 19:48
  • 1
    Интересный... Я думал -n только относившийся 'определенные' переменные ($abc, $xyz, и т.д.), но я предполагаю, что $ (...) является 'определенной' временной переменной.. +1... (и я просто считал недавно то использование -n опасно, если Вы не уверены, что переменная не была уже объявлена и 'не использована)..., но временный файл не будет иметь этой возможности... т.е. неинициализированный по сравнению с пустым –  Peter.O 27.05.2011, 11:09
  • 2
    @fred: On the contrary, -n тесты, пуста ли строка, она не имеет никакого отношения к переменным. Что Вы считали, вероятно, говорило то использование -n не тестирует, определяется ли переменная: -n "$foo" ложь если foo определяется, но пуст, и отображает сообщение об ошибке под set -u. [ -n "${foo+1}" ] надежно тесты, ли foo установлен, но обработка пустого и переменные сброса тождественно обычно является хорошей идеей: [ -n "${foo:+1}" ], или просто [ -n "$foo" ] если Вы не волнуетесь по поводу set -u. –  Gilles 'SO- stop being evil' 27.05.2011, 13:01
  • 3
    Спасибо! я не имею -quit доступный, но передающий по каналу к head -n 1 работы (как делает head -c 1, который останавливается еще ранее, но вероятно с незначительным преимуществом). Кроме того, я сделал ошибку записи моего вопроса без кода передо мной: Я использую wc -l в другом случае, где я должен знать общее количество найденных файлов. В случае, где я только тестирую на то, существуют ли какие-либо соответствия, я использовал if [ -z `find … ` ]. –  Chris Page 01.06.2011, 10:04

Можно использовать -quit действие для остановки после первого соответствия. Вы, вероятно, захотите объединить это с другим действием (как -print) или Вы не сможете сказать, нашло ли это что-нибудь.

Например, find ... -print -quit распечатает путь первого файла соответствия и затем выйдет. Или, Вы могли использовать -printf 1 -quit распечатать 1, если существует соответствие и ничто, если нет.

findстатус выхода отражается, были ли ошибки при поиске, и не, нашел ли он что-либо, таким образом, необходимо проверить его вывод, чтобы видеть, существует ли соответствие.

6
27.01.2020, 19:48
  • 1
    -quit расширение GNU. Это не будет работать над системами с помощью других реализаций находки (1), таких как OS X, BSDs и вероятно большинство коммерческих Нельдов. –  Warren Young 27.05.2011, 04:25
  • 2
    Спасибо, это полезно для знания в случае, если я использую другую систему. К сожалению, ни - выход, ни-printf доступны на шахте (Mac OS X). –  Chris Page 27.05.2011, 04:53

Вы можете обернуть это в условие оболочки, например:

[ "$(find . ...)" '!=' '' ] && echo Found || echo Not found

Где ... - это ваше условие совпадения, например, - имя *.txt.

Некоторые другие примеры:

[ "$(find /etc -name hosts)" ] && echo True || echo False
[ ! -z "$(find /etc -name hosts)" ] && echo True || echo False
0
27.01.2020, 19:48

Выход 0 выполняется просто с помощью find, выход> 0 сложнее, потому что обычно это происходит только с ошибкой. Однако мы можем сделать это:

if find -type f -exec false {} +
then
  echo 'nothing found'
else
  echo 'something found'
fi

Обратите внимание, что это решение более производительно, чем использование подоболочки; Выполнение false определенно быстрее, чем выполнение даже Dash:

$ cat alfa.sh bravo.sh charlie.sh delta.sh
find -name non-existing-file -exec false {} +
find -name existing-file -exec false {} +
[ "$(find -name non-existing-file)" ]
[ "$(find -name existing-file)" ]

$ strace dash alfa.sh | wc -l
807

$ strace dash bravo.sh | wc -l
1141

$ strace dash charlie.sh | wc -l
1184

$ strace dash delta.sh | wc -l
1194
4
27.01.2020, 19:48

Теги

Похожие вопросы