Відповіді:
У цьому випадку це означає «стандартний ввід». Він використовується деяким програмним забезпеченням (наприклад tar
), коли потрібен аргумент файлу і вам потрібно використовувати stdin. Це не оболонка, і це залежить від програми, яку ви використовуєте. Перевірте сторінку, якщо сумніваєтеся!
У цьому випадку стандартний ввід є аргументом для -f
параметра. У випадках, коли -
це не підтримується, ви можете піти, використовуючи щось на кшталт tar xvf /proc/self/fd/0
або tar xvf /dev/stdin
(останнє широко підтримується різними уніями).
Не покладайтеся на це, щоб загалом позначати «стандартний вклад». Оскільки це не інтерпретується оболонкою, кожна програма вільна поводитися з нею як завгодно. У деяких випадках це стандартний вихід або щось зовсім інше: на su
ньому позначається "запустити оболонку входу". В інших випадках це зовсім не трактується. М'язова пам'ять змусила мене створити досить багато файлів, названих -
через те, що якась версія якоїсь програми, яку я використовував, не розуміла тире.
STDOUT
, залежно від контексту.
/dev/stdin
або /dev/stdout
можна використовувати, якщо ви дійсно хочете введення / виводу потоку. Зауважте, що це потік, програми, які хочуть шукати у файлі, можуть працювати з ним неправильно, як це було б у випадку -
(наприклад, ffmpeg)
bash
, дефіс буде інтерпретуватися оболонкою. Див. Розширений посібник із написання сценаріїв - Розділ 3. Спеціальні символи , потім знайди текст [тире] або "перенаправлення з / на stdin або stdout". Використовуючи bash
ви можете використовувати дефіс у більшості місць, де очікується ім’я файлу. Це очевидний додаток до <| > IMHO
cat
ручки -
(перевірити вкладку). Вбудована в оболонку версія cat
може і не може, але це не суворо вся оболонка. Крім того, якщо оболонка обробляється -
, ви можете сказати відлуння, -
і вона розшириться до чогось іншого. Натомість це просто перегукується тире (ні /dev/stdin
чи /proc/self/fd/0
). І echo test > -
просто створюється файл, який називається -
, тому він також чітко не обробляє його. О, і на перерахованій вами сторінці не сказано, що вона обробляється оболонкою , вона говорить про те, що ви можете користуватися нею, cat
і diff
обидві чітко розуміють тире.
У цьому випадку -
фактично досить марно, якщо припустити, що ви працюєте з Linux:
GNU tar (версія для Linux) приймає його за допомогою стандартного вводу за замовчуванням. Якщо ви не хочете такої поведінки і хочете передати ім'я файлу як аргумент командного рядка, тоді вам потрібно вказати прапор f
:
tar xf filename
Так це те саме, що
tar x < filename
Або, якщо вхід gzipped, як у вашому прикладі:
gzip -dc filename | tar x
Тут взагалі не має сенсу вказувати f
прапор, але оскільки він був визначений, ім'я файлу потрібно вказати, -
щоб вказати, що ми хочемо читати зі стандартного введення (див. Іншу відповідь). Отже, повторити, це зайве і трохи дивно.
Крім того, вищезазначений рядок може бути спрощений, оскільки GNU tar можна сказати протікати вхід через gzip
себе, вказавши z
прапор:
tar xfz filename
- Не потрібно gzip
чітко телефонувати .
tar
має z
можливість.
tar
дефолт до першого накопичувача з історичних причин.
/dev/sa0
на FreeBSD 9.0, /dev/rst0
на NetBSD 6.0 та OpenBSD 5.1). За замовчуванням AIX 7.1 до /dev/rmt0
. За замовчуванням MINIX3 до /dev/sa0
. (Я перевірив останню версію операційної системи в кожному конкретному випадку, це не «старі мейнфрейми».) Solaris налаштовується через файл в /etc
, який я думаю , по замовчуванням для накопичувача на магнітній стрічці. GNU tar, tar Schilling tar, OSX та BusyBox за замовчуванням для stdin / stdout.
tar
за замовчуванням другий магнітофон, з очевидних причин. :)
-
не потрібно бути в кінці команди. Наприклад:ls -l | diff - /old_ls_output.txt
.