Вместо того, чтобы составлять список имен файлов и шаблонов в виде одной строки, вы можете сделать его массивом, начинающимся с:
list=(file1 dir1 "**.data" "**.source")
, а затем цикл по элементам:
args=()
for item in "${list[@]}" ; do
args+=(--filter="+ $item")
done
Это создаст аргументы, подобные --filter=+ file1
, без каких-либо кавычек внутри строки аргумента. (Вы не хотите, чтобы кавычки шли к rsync
. Он будет жаловаться на правило фильтрации, в котором они есть, например.rsync "--filter='+ foo'"...
)
И когда вы передаете массив команде, обязательно используйте "${args[@]}"
для передачи элементов массива в виде отдельных строк:
rsync "${args[@]}" "$srcdir" "$destdir"
Вместо "--filter=+ foo"
, я думаю, вы могли бы просто использовать --include=foo
. Это убрало бы один проблемный пробел из аргументов (, но ничего не сказало бы о пробелах или подстановках в шаблонах имен файлов ).
В вашем случае вы использовали set -f
для отключения подстановки, for i in $list
должно работать, но, поскольку вам нужен массив, вы можете использовать его для начала.
Что еще более важно, присваивание args=${arr[*]}
выравнивает массив до одной строки. Теперь пробелы внутри аргументов и пробелы между аргументами равны, есть только --filter=+ file1 --filter=+ dir1...
, и оболочка не может различать разные виды пробелов. Расширение без кавычек $args
будет разбито на все без исключения пробелы (, которые показывает вывод set -x
, если вы хотите проанализировать беспорядок кавычек.)
По сути, все выгоды от использования массива были поставлены под сомнение при выполнении этого задания.
Из коробки многие *nix-терминалы позволяют копировать и вставлять текст, просто выделяя текст, который вы хотите скопировать, и вставляя его, нажимая среднюю кнопку мыши. Никаких дополнительных нажатий кнопок не требуется! Если это не улучшение UX, то я не знаю, что это такое.
Вообще говоря, вы можете самостоятельно поменять местами кнопки Control и Command с помощью встроенных -инструментов, таких как xmodmap
. Это приведет к тому, что большинство ярлыков в стиле Apple -будут работать так же, как и на Mac.
Тем не менее, исходя из моего опыта использования клавиатуры Apple, я счел более удобным сделать клавишу Command функциональной как Alt , а Caps Lock и Клавиши возврата действуют как Ctrl , если их удерживать. Этого можно добиться, изменив настройки по умолчанию в драйвере клавиатуры Apple hid-apple
в сочетании с утилитами xmodmap
и xcape
.
По правде говоря, это очень сложно реализовать правильно, так как простого обмена ключами недостаточно, но это близко. Если вы помните о различиях между приложениями с графическим интерфейсом и терминальными приложениями и потенциальных конфликтах в DE, а также о том, как это может повлиять на горячие клавиши некоторых приложений, управляемых горячими клавишами, то вы можете довольно хорошо решить эту проблему, в частности, с такими приложениями, как xkeysnail.
Конечно, есть autokey, xmodmap, xkbcomp, xbindkeys и другие, которые могут помочь, но я не нашел ни одного из них, с которым было бы так же легко работать, если вы хотите разрешить потенциальные конфликты с относительной легкостью.
Я являюсь автором Kinto, и мне кажется, что я решил самые сложные проблемы, связанные с тем, чтобы заставить mac как привязки клавиш работать под Linux или Windows.
Если после установки вам нужно изменить файл конфигурации для Kinto, посмотрите это место.
vi ~/.config/kinto/kinto.py
sudo systemctl restart xkeysnail
# typically xkeysnail does not install as a service - specific to Kinto only
Окна
~\.kinto\kinto.ahk
# Right click the tray icon and re-apply your keyboard type for changes to take affect
https://github.com/rbreaves/kinto
https://github.com/mooz/xkeysnail
Кроме того, если ваша цель — работать с Linux так же, как с Mac, я бы рекомендовал использовать Ubuntu Budgie и включить встроенное расширение Global App Menu. Я протестировал этот дистрибутив, в том числе с Kinto, чтобы убедиться, что он работает должным образом.Сопровождающие Solus Budgie также недавно приняли патч вышестоящего уровня, так что Kinto больше не нужно будет исправлять DE для правильной поддержки переключения окна Cmd -Tab / приложения.