LINUX.ORG.RU

Передача нескольких параметров команде

 , ,


1

3

Есть каталог с следующим содержимым:

./1 1
./test1
./test2

Есть скрипт, который должен запаковать содержимое каталога, исключив файлы «1 1» и «test1».
Всё никак не удаётся передать tar'у строку с исключениями:

#!/bin/bash
TarExclude="--exclude=\"1 1\" --exclude=test1"
tar -cf testtar.tar * "$TarExclude"
tar -tf ./testtar.tar
В этом случае архивируется всё.

Опытным путём выяснил, что если указать только один exclude:

TarExclude="--exclude=1 1"
то исключение файла «1 1» происходит нормально, несмотря на пробел. Но если указать два параметра, например:
TarExclude="--exclude=test1 --exclude=test2"
то исключения, опять же, игнорируются.

Если прописать исключения текстом в строку с вызовом tar'а, то всё, опять же работает нормально:

tar -cf testtar.tar * --exclude="1 1" --exclude=test2

Уже второй день сижу - никак не могу разобраться как же ему передать параметры исключение из переменной, чтобы ему всё понравилось.

★★★★★

Попробуй без кавычек.

tar -cf testtar.tar * $TarExclude

kvap
()
Ответ на: комментарий от ananas

eval

Спасибо тебе добрый человек!

Попробуй без кавычек.

Пробовал - игнорировались параметры с пробелами. С eval взлетело.

najlus ★★★★★
() автор топика
TarExclude=("--exclude" "1 1" "--exclude" "test1")
tar -cf test.tar * "${exclude[@]}"
anonymous
()

Либо массивами:

$ cat ../test.sh 
#!/bin/bash
set -x
TarExclude="--exclude='1 1' --exclude=test1"
tar -cf testtar.tar * "$TarExclude"
tar -tf ./testtar.tar

$ bash ../test.sh 
+ TarExclude='--exclude="1 1"  --exclude=test1'
+ tar -cf testtar.tar '1 1' test1 test2 '--exclude="1 1"  --exclude=test1'
+ tar -tf ./testtar.tar
1 1
test1
test2

$ cat ../work.sh 
#!/bin/bash
set -x
TarExclude=(--exclude="1 1"  --exclude=test1)
tar -cf testtar.tar * "${TarExclude[@]}"
tar -tf ./testtar.tar

$ bash ../work.sh 
+ TarExclude=(--exclude="1 1" --exclude=test1)
+ tar -cf testtar.tar '1 1' test1 test2 '--exclude=1 1' --exclude=test1
+ tar -tf ./testtar.tar
test2

Либо eval:

$ cat ../eval.sh 
#!/bin/bash
set -x
TarExclude="--exclude=\"1 1\"  --exclude=test1"
eval "tar -cf testtar.tar * $TarExclude"
tar -tf ./testtar.tar

$ bash ../eval.sh 
+ TarExclude='--exclude="1 1"  --exclude=test1'
+ eval 'tar -cf testtar.tar * --exclude="1 1"  --exclude=test1'
++ tar -cf testtar.tar '1 1' test1 test2 '--exclude=1 1' --exclude=test1
+ tar -tf ./testtar.tar
test2
kim-roader ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.