Я использую Ubuntu 18.04, 19.04 и 19.10
для gnome-shell
цель theming, я сталкиваюсь ниже ситуации.
admin@i7-4770:~$ ls /usr/share/themes/Yaru/gnome-shell/
calendar-today.svg noise-texture.png
checkbox-dark.svg no-notifications.svg
checkbox-focused-dark.svg pad-osd.css
checkbox-focused.svg pointer-double-click-symbolic.svg
checkbox-off-dark.svg pointer-drag-symbolic.svg
checkbox-off-focused-dark.svg pointer-primary-click-symbolic.svg
checkbox-off-focused.svg pointer-secondary-click-symbolic.svg
checkbox-off.svg process-working.svg
checkbox.svg running-indicator.svg
dash-placeholder.svg source-button-border.svg
gnome-shell.css summary-counter.svg
gnome-shell-high-contrast.css toggle-off-dark.svg
key-enter.svg toggle-off-hc.svg
key-hide.svg toggle-off-intl.svg
key-layout.svg toggle-off.svg
key-shift-latched-uppercase.svg toggle-on-dark.svg
key-shift.svg toggle-on-hc.svg
key-shift-uppercase.svg toggle-on-intl.svg
lockscreen-gradient.svg toggle-on.svg
logged-in-indicator.svg ws-switch-arrow-down.svg
message-indicator-symbolic.svg ws-switch-arrow-up.svg
no-events.svg
admin@i7-4770:~$
Я должен создать символьную ссылку каждого .svg
и .png
файлы от вышеупомянутого вывода до /usr/share/gnome-shell/theme/
каталог.
обряд теперь, мой единственный путь состоит в том, чтобы работать за каждым файлом.
sudo ln -s /usr/share/themes/Yaru/gnome-shell/calendar-today.svg /usr/share/gnome-shell/theme/
Я уверен, эксперты могут сделать это очень быстрым.
Как я могу достигнуть этого?
Вам вообще не нужна петля. Просто запустите эту команду ln
:
sudo ln -s /usr/share/themes/Yaru/gnome-shell/*{png,svg} /usr/share/gnome-shell/theme/
Раскрытие скобок обрабатывается оболочкой перед запуском любой команды. Таким образом, приведенная выше команда выглядит так:
sudo ln -s /usr/share/themes/Yaru/gnome-shell/noise-texture.png /usr/share/themes/Yaru/gnome-shell/checkbox-dark.svg [...] /usr/share/themes/Yaru/gnome-shell/ws-switch-arrow-up.svg /usr/share/gnome-shell/theme/
Другими словами, она становится ln -s f1 f2 ... fN / path / to / target / dir
, и это все, что вам нужно для связывания всех ваших файлов. Например:
$ ls foo/
file1.svg file2.svg file3.svg file4.png file5.png file6.png
$ ln -s $HOME/foo/*{svg,png} bar/
$ ls -l bar/
total 0
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file1.svg -> /home/terdon/foo/file1.svg
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file2.svg -> /home/terdon/foo/file2.svg
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file3.svg -> /home/terdon/foo/file3.svg
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file4.png -> /home/terdon/foo/file4.png
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file5.png -> /home/terdon/foo/file5.png
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file6.png -> /home/terdon/foo/file6.png
Если вам просто нужен цикл по какой-то причине, используйте вместо него globs:
for file in /usr/share/themes/Yaru/gnome-shell/*{png,svg}; do
sudo ln -s "$file" /usr/share/gnome-shell/theme/
done
Таким образом, вам не нужно беспокоиться о каких-либо странных именах файлов, как если бы вы использовали LS
. Также обратите внимание, как я цитирую "$ file"
, что также необходимо для странных имен файлов.
после нескольких поисков с помощью Google..
закончился с ниже сценария
#!/bin/bash
for p in $(ls /usr/share/themes/Yaru/gnome-shell | grep '.svg\|.png'); do
sudo ln -s /usr/share/themes/Yaru/gnome-shell/$p /usr/share/gnome-shell/theme/
done
, Он работал. Но я все еще думаю, что эксперты могут сделать его с единственной командой, которая может быть введена в терминал.