'-' используется только с CD?

Что находится в Fedora repos (особенно обновление) является последним. Вы могли бы попробовать koji, где недавно созданные пакеты загружаются. Что Вы находите, там идет от неудавшихся сборок до крайне поврежденных пакетов полностью к обновлению, у которого требуют распределение прямо сейчас. Определенно не рекомендуемый, но эй, Unix - все о предоставлении пользователю достаточного количества веревки для стрельбы в их ноги.

Вы могли попробовать Fedora 18, но что у каждого в настоящее время есть gnome-shell-3.6.2-6.fc18. Или погружение в сыромятную плеть (прокручивающиеся обновления с очень последним материалом, который не взорвался на первом показе).

45
29.07.2014, 00:59
7 ответов

В рекомендациях по синтаксису служебных программ POSIX (в частности, # 13) указано, что для служебных программ, которые ожидают чтения из имени файла, - означает стандартный ввод, а для утилит, которые ожидают записи имени файла, - означает стандартный вывод. Например, cat somefile - копирует содержимое somefile на свой стандартный вывод, за которым следует то, что он читает на своем стандартном вводе.

Это правило не распространяется на команду cd , поскольку она не читает и не записывает в файл. cd делает другое: аргумент - означает «предыдущий каталог». Команда cd - эквивалентна cd "$ OLDPWD" && pwd . Такое поведение характерно для команды cd и для непосредственных команд, таких как pushd .

Обратите внимание, что - - это операнд, а не опция. Только аргументы, начинающиеся с - , а не только - или - , являются вариантами. Основное значение операнда состоит в том, что - не влияет на его особое значение. Например, cd - -P заменяет подкаталог с именем -P , но cd - - совпадает с cd - ], он не переходит в каталог с именем - . Точно так же cat - - читает не из файла с именем - , а из стандартного ввода.

22
27.01.2020, 19:34

cd - на самом деле сокращение для cd "$OLDPWD" && pwd, где $OLDPWD устанавливается каждый раз, когда вы меняете каталоги в каталоге, в котором вы только что находились.

Обработка - зависит от приложения. Некоторые приложения используют - для обозначения STDIN, например. grep, awk

Другие приложения могут использовать - в качестве сокращения для всего, что они выбирают, как указывает ответ Майкла, с su, - в качестве сокращения для --login

36
27.01.2020, 19:34

Хотя Майкл упоминает, что su и другие приложения могут использовать -, чтобы означать всё, что они хотят (чтение из stdin - обычное дело), Git использует - таким же образом, как cd делает , для смены ветвей.

$ git status
On branch master

$ git checkout foobar
$ git status
On branch foobar

$ git checkout -
$ git status
On branch master
19
27.01.2020, 19:34

Любая программа может использовать - в качестве аргумента, чтобы обозначать все, что они хотят. Одним из распространенных примеров является su , в котором - используется как сокращение для - login . Единственное соглашение, которое я могу придумать, это то, что программы, которые читают из файлов, часто используют - для обозначения «читать из stdin» , но это полностью зависит от программы

18
27.01.2020, 19:34

Как ответил gnouc, - имеет свое значение в cd.

Однако, поведение - можно повторить в других программах, используя ~-. For example:

cd /etc
cd /
ls ~-             #lists the contents of the /etc directory
vim ~-/fstab      #opens the file /etc/fstab in vim
2
27.01.2020, 19:34

- определено в POSIX Utility Syntax Guidelines как стандартный вход:

Guideline 13:
For utilities that use operands to represent files to be opened for either 
reading or writing, the '-' operand should be used to mean only standard input 
(or standard output when it is clear from context that an output file is being 
specified) or a file named -.

Вы можете увидеть это определение для утилит, которые работают с файлами для чтения или записи. cd не принадлежит к этим утилитам, поэтому - в cd не следует этому руководству.

Кроме того, POSIX также определил - имеет собственное значение с cd:

-
    When a <hyphen> is used as the operand, this shall be equivalent to the 
    command:

    cd "$OLDPWD" && pwd

    which changes to the previous working directory and then writes its name.
46
27.01.2020, 19:34

Добавляю сюда свои два цента. Я использую '-', чтобы сказать инструменту ps2pdf читать со стандартного входа, как несколько человек предлагали ранее:

man -t ls | ps2pdf - ls.pdf

Вышеуказанный один лайнер создает pdf версию man-страницы для ls в текущем каталоге.
Надеюсь, кто-нибудь найдет это полезным :).

2
27.01.2020, 19:34

Теги

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