Запретить 'cp' выводить имя файла из скрипта bash - PullRequest
0 голосов
/ 07 ноября 2008

У меня есть сценарий оболочки, который копирует несколько файлов в текущий каталог, сжимает их и передает сжатый файл на стандартный вывод.

На стороне клиента я использую plink для выполнения скрипта и потокового ввода в файл.

Это почти работает.

Кажется, что команда cp выводит имя файла, который копируется, когда он выполняется изнутри скрипта. Если я выполняю ' cp / path / to / file1. ' в оболочке, он делает это тихо; если я выполню его в скрипте, он выдаст «file1».

Как мне предотвратить это? Я попытался передать вывод команды cp в / dev / null и в пустой текстовый файл, но безуспешно.

спасибо за любую помощь.

скрипт

#!/bin/bash

cp /path/to/file1 .
cp /path/to/file2 .
cp /path/to/file3 .

tar -cvzf package.tgz file1 file2 file3

cat package.tgz

выход

file1
file2
file3
<<binary data>>

Ответы [ 3 ]

19 голосов
/ 07 ноября 2008

Это не cp, это смола. Вы передаете его -v, который заставляет печатать имена файлов.

2 голосов
/ 07 ноября 2008

Aha! Я всегда предполагал, что имена файлов, испускаемых tar, идут в stderr, но это не всегда так: только если вы записываете свой tar-файл в stdout, файлы, записанные -v, переходят в stderr:

$ tar cvf - share > /dev/null
share/                         # this must be going
share/.DS_Store                # to stderr since we
share/man/                     # redirected stdout to
share/man/.DS_Store            # /dev/null above.
share/man/man1/
share/man/man1/diffmerge.man1

Контрпример:

$ tar cvf blah.tar share > /dev/null

Это не привело к списку имен файлов, потому что они были отправлены на /dev/null. Я думаю, вы узнаете что-то новое каждый день. : -)

0 голосов
/ 12 ноября 2011

Как отмечали другие, опция -v (многословно) для tar выводит имена файлов в STDERR. Вы также можете сделать свой сценарий более эффективным, запустив tar записать поток сжатых файлов в STDOUT:

tar zcf - file1 file2 file3

В этом примере опция "-", переданная в качестве имени файла, заставляет tar записать вывод в STDOUT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...