Что означает тире «-» в конце команды?

Что означает тире «-» в конце команды?

Дана следующая команда:

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явно.

Связанный контент