При попытке установить Dropbox из командной строки, я читаю команды
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
что -
значит здесь? это предыдущий каталог?
command-line
tar
Алгебра
источник
источник
f -
. Это может немного облегчить поиск ответа в справочных страницах.wget
иtar
. Таким образом, соответствующие разработчики могут улучшить свою документацию, чтобы будущие пользователи больше не сталкивались с теми же проблемами. Другими словами: будь героем и сделай мир лучше!$TAPE
не установлен.Ответы:
Некоторые команды принимают
-
вместо имени файла, либо:-
аргумент, переданныйwget
после-O
.-
аргумент переданtar
послеxzf
.Показанная вами команда загружает архивный файл
wget
и распаковывает егоtar
. Для достижения этой цели, выходwget
IS конвейера (|
) на входtar
. Вот почемуwget
запись в стандартный вывод вместо файла иtar
чтение из стандартного ввода вместо файла.источник
-
. , Так что если-
операнд для «опции файла» и имеет особое значение, то это должно быть значение stdin / stdout. Программа бесплатна, чтобы не рассматривать как особый случай и просто искать файл-
-
)-
с ним, рассматривая его как буквальное имя файла. Единственный способ пойти вразрез с рекомендациями - это относиться к ним-
особым образом, но с другим значением, отличным от того, которое предлагает руководство.Это просто имя файла, которое многие программы Unix интерпретируют как «вместо того, чтобы фактически открывать файл, читать из него
stdin
(или записывать в негоstdout
)».Это означает чтение из входных данных, которые поступают в программу; в вашем случае это вывод wget.
источник
./-
если вы действительно хотите открыть файл с именем-
.stdin
- это файловый дескриптор, и-
это имя, которое вы указываете для его использования. Однако это не имя файла с точки зрения ОС. Только с точки зрения пользователя./dev/stdin
это просто имя файла удобства, предлагаемое некоторыми средствами ядра. Обычно, когда вы пишете программу, которая использует stdin, ничего неfopen("/dev/stdin", "r")
происходит; Вы просто продолжаете и используете то,extern FILE* stdin
что вам предоставил ваш заголовок libc; кстати, это целочисленный дескриптор файла0
.-
Аргументtar
специфицирует , что архив следует читатьstdin
вместо файла. Из руководства по GNU tar :Другие команды имеют такое же поведение, и это определяется стандартом POSIX.1-2017 :
источник