Дана следующая команда:
gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –
Что -
означает в конце команды? Это какой-то заполнитель?
решение1
В данном случае это означает «стандартный ввод». Он используется некоторым программным обеспечением (например, tar
), когда требуется аргумент файла, и вместо него нужно использовать stdin. Это не конструкция оболочки, и она зависит от используемой вами программы. Проверьте man-страницу, если сомневаетесь!
В этом случае аргументом опции является стандартный ввод -f
. В случаях, когда -
не поддерживается, можно обойтись использованием чего-то вроде tar xvf /proc/self/fd/0
или tar xvf /dev/stdin
(последнее широко поддерживается в различных unice-системах).
Не полагайтесь на то, что это означает "стандартный ввод" повсеместно. Поскольку это не интерпретируется оболочкой, каждая программа вольна обращаться с этим, как ей заблагорассудится. В некоторых случаях это стандартвыходили что-то совсем другое: on su
это означает «запустить оболочку входа». В других случаях это вообще не интерпретируется. Мышечная память заставила меня создать довольно много файлов, названных так, -
потому что какая-то версия какой-то программы, к которой я привык, не понимала тире.
решение2
В этом случае это -
на самом деле бесполезно, если вы используете Linux:
GNU tar (версия для Linux) по умолчанию принимает входные данные из стандартного ввода. Если вы это сделаетенетЕсли вы хотите такое поведение и хотите передать имя файла в качестве аргумента командной строки, то вам нужно указать флаг f
:
tar xf filename
Так что это то же самое, что и
tar x < filename
Или, если входные данные сжаты с помощью gzip, как в вашем примере:
gzip -dc filename | tar x
f
Здесь вообще нет смысла указывать флаг, но поскольку он был указан, имя файла должно быть указано как -
указание того, что мы хотим читать из стандартного ввода (см. другой ответ). Так что, повторюсь, это избыточно и немного странно.
Более того, приведенную выше строку можно упростить, поскольку GNU tar можно указать, что нужно направлять входные данные через gzip
себя, указав z
флаг:
tar xfz filename
– Нет необходимости звонить gzip
явно.