Відповіді:
У цьому випадку це означає «стандартний ввід». Він використовується деяким програмним забезпеченням (наприклад 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.