Что действительно подчеркивает штриховой линией “-” в конце средней команды?

Проверьте udev файлы конфигурации.

Файл как это:/etc/udev/rules.d/70-persistent-net.rules

связывает ИМЯ (ethX) с MAC-адресом.

У Вас, вероятно, есть старые карты MAC, связанный с eth0. Удалите его строку и измените новую карту на eth0.

79
28.06.2012, 13:33
2 ответа

В этом случае это означает ‘стандартный вход’. Это используется некоторым программным обеспечением (например. tar) когда аргумент файла требуется, и необходимо использовать stdin вместо этого. Это не конструкция оболочки, и это зависит от программы, которую Вы используете. Проверьте страницу справочника если в сомнение!

В этом экземпляре стандартный вход является аргументом -f опция. В случаях, где - не поддерживается, можно сойти с рук использование чего-то как tar xvf /proc/self/fd/0 или tar xvf /dev/stdin (последний широко поддерживается в различных нельдах).

Не полагайтесь на это, чтобы означать, что ‘стандарт ввел’ универсально. Так как это не интерпретируется оболочкой, каждая программа является бесплатной иметь дело с ним, как этому нравится. В некоторых случаях это - стандартный вывод или что-то совершенно различное: на su это имеет значение, ‘запускают оболочку входа в систему’. В других случаях это не интерпретируется вообще. Память мышц заставила меня создать довольно много названных файлов - потому что некоторая версия некоторой программы, к которой я привык, не поняла тире.

83
27.01.2020, 19:31
  • 1
    Это может также означать STDOUT, В зависимости от контекста. –  bahamat 28.06.2012, 13:32
  • 2
    И в значительной степени что-либо еще, как это до отдельных программ для интерпретации. –  Alexios 28.06.2012, 13:34
  • 3
    /dev/stdin или /dev/stdout может использоваться, если Вы действительно хотите поток ввода/вывода. Обратите внимание, что это - поток, программы, которые хотят искать в файле, не могут работать правильно с ним, как имел бы место с - (например, ffmpeg) –  Lekensteyn 28.06.2012, 14:49
  • 4
    В случае bash, дефис интерпретируется оболочкой. См. Усовершенствованное Руководство по созданию сценариев Bash - Глава 3. Специальные символы, затем ищите текст [тире] или "перенаправление из/в stdin или stdout". Используя bash можно использовать дефис большинство мест, ожидающих имя файла. Это - очевидное дополнение к <|>, по моему скромному мнению –  bsd 03.07.2012, 22:32
  • 5
    я не убежден, что это имеет место. Во-первых, cat дескрипторы - (проверьте страницу справочника). Встроенная оболочкой версия cat мог бы, или не мог бы, но это не строго вся оболочка. Кроме того, если оболочка обрабатывается -, Вы могли сказать эхо - и это расширилось бы до чего-то еще. Вместо этого это просто повторяет тире (нет /dev/stdin или /proc/self/fd/0). И echo test > - просто создает названный файл -, таким образом, это ясно не обрабатывает его там также. О, и страница, которую Вы перечислили, не говорит, что обрабатывается оболочкой, она говорит, что можно использовать ее с cat и diff, оба из которых понимают тире явно. –  Alexios 04.07.2012, 11:14

В этом случае, - на самом деле довольно бесполезно, предполагая, что Вы запускаете Linux:

Tar GNU (версия на Linux) принимает свой вход от стандартного входа по умолчанию. Если Вы не хотите это поведение и хотите передать имя файла как параметр командной строки, то необходимо указать флаг f:

tar xf filename

Таким образом, это совпадает с

tar x < filename

Или, если вход является gzipped как в Вашем примере:

gzip -dc filename | tar x

Это не значимо для определения f отметьте здесь вообще, но потому что это было указано, имя файла должно быть дано как - указать, что мы хотим читать из стандартного входа (см. другой ответ). Так, для повторения это избыточно и немного странно.

Кроме того, вышеупомянутая строка может быть упрощена, потому что tar GNU можно сказать передать вход потоком через gzip самостоятельно путем определения z флаг:

tar xfz filename

– Никакая потребность звонить gzip явно.

14
27.01.2020, 19:31
  • 1
    Отметьте: не каждый tar имеет z опция. –  liori 28.06.2012, 17:53
  • 2
    Большинство Ose кроме Linux имеет tar установка по умолчанию к первому ленточному накопителю, по историческим причинам. –  Gilles 'SO- stop being evil' 29.06.2012, 02:31
  • 3
    @Gilles и BSD и OS X, …. Но мне любопытно: что другие системы кроме нескольких старых мейнфреймов все еще используют такую версию (что системы кроме мейнфреймов действительно даже имеют ленточным накопителем)? –  Konrad Rudolph 29.06.2012, 09:51
  • 4
    @KonradRudolph Все три главных значения по умолчанию BSDs к ленточному накопителю (/dev/sa0 на FreeBSD 9.0, /dev/rst0 на NetBSD 6.0 и OpenBSD 5.1). Значения по умолчанию AIX 7.1 к /dev/rmt0. Значения по умолчанию MINIX3 к /dev/sa0. (Я проверил последнюю версию ОС в каждый случай, это не “старые мейнфреймы”.) Солярис настраивается через файл в /etc, который я думаю значения по умолчанию к ленточному накопителю. Tar GNU, tar Шиллинга, OSX и значение по умолчанию BusyBox к stdin/stdout. –  Gilles 'SO- stop being evil' 29.06.2012, 10:46
  • 5
    @Gilles - Я перекомпилировал tar принимать значение по умолчанию к второму ленточному накопителю, по очевидным причинам. :) –  David Harkness 29.06.2012, 12:09

Теги

Похожие вопросы