Повторное использование похожих флагов для нескольких команд

Предположим, я хочу выполнить несколько команд с похожими флагами, такими как:

du -sh / --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 tar cvf archive / --exclude=dir1 --exclude=dir2 --exclude=dir3/dir4 

Я хочу повторно использовать последовательность флагов --exclude и сделать код более чистым, например, сохраняя эти флаги в переменной.

Итак, потом над командами выглядят

 du -sh / "$EFLAGS" tar cvf archive / "$EFLAGS" 

Обратите внимание, что tar исключает файлы и каталоги по отношению к данному каталогу.

Какое лучшее и чистое решение?

Задний план

Я хочу сделать резервную копию моей системы с помощью tar и исключить некоторые каталоги, которые мне не нужны.

3 Solutions collect form web for “Повторное использование похожих флагов для нескольких команд”

Вы можете попробовать следующее:

 $ echo -e / --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 / --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 $ echo !!:3-$ echo --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 

Здесь мы используем расширение истории bash :

  • !! обратитесь к последней команде
  • 3-$ ссылаются на третий параметр до последнего

Вы должны включить функции расширения истории bash в вашем скрипте, которые отключены в неинтерактивной оболочке:

 set -o history set -o histexpand 

В Bash очень чистый способ – использовать массивы:

 myflags=( --exclude=/dir1 --exclude=/dir2 --exclude=/dir3/dir4 ) tar cvf archive / "${myflags[@]}" 

Они могут обрабатывать пробелы и любые другие забавные персонажи:

 myflags=( "--exclude=/a dir/with spaces" $'--exclude=/a dir/with\nnewlines' ) tar cvf archive / "${myflags[@]}" 

Их также можно подделать, например, вы хотите исключить все подкаталоги каталога /this/one , которые содержат букву g :

 exclude_dirs=( /this/one/*g* ) myflags=( "${exclude_dirs[@]/#/--exclude=}" ) tar cvf archive / "${myflags[@]}" 

Я бы добавил это как комментарий, за исключением того, что я не понял, как правильно форматировать комментарии!

Во всяком случае, я считаю, что вы на 90%. Пытаться:-

 EFLAGS="--exclude=/dir1 --exclude=/dir2" du -sh / $EFLAGS tar cvf archive / $EFLAGS 

Котировки нужны в первой строке, так как есть пробелы.

Нет кавычек при использовании переменной, чтобы она разбивала аргументы на пробелы.

Если в именах исключенных каталогов есть пробелы, вам нужно их избежать.

  • Значение SQLPLUS в переменной - не работает от crontab
  • Возьмите входные аргументы и передайте их на сегодняшний день
  • Как использовать внутренние функции gnuplot по ссылке столбца в оболочке
  • Назначить фоновый процесс subshell pid переменной
  • кратчайший способ замены символов в переменной
  • Связь между процессами запуска оболочки и средой родительского процесса
  • Переменная Shell в теге <a href>
  • Обрезать текст без цикла
  • Как установить bash-псевдонимы и переменные из vim?
  • Имя переменной из вывода команды
  • Защищенные переменные среды?
  • Linux и Unix - лучшая ОС в мире.