1 отличается, чем 2 и 3. 2 и 3 идентичны.
В версии 1, C\nB\nA\n
отправляется в sort
. sort
FD 2 отображается от его исходного места назначения (STDERR
) к STDOUT
и затем FD 1, который перешел бы в STDOUT
так или иначе, отправляется в... sort
STDOUT
снова (скорее бессмысленно).
В версиях 2 и 3, echo
FD 2 отображается от его исходного места назначения (STDERR
) к STDOUT
и затем FD 1, который перешел бы в STDOUT
так или иначе, отправляется в echo
STDOUT
.
Функционально эти команды только произведут другой вывод, если одна из команд отправит что-то в STDERR
.
В версии 1, если echo
производит что-то к FD 2, он перейдет в STDERR
, но в 2 и 3, это перейдет в STDOUT
(и таким образом также быть переданным по каналу к sort
). Кроме того, в версии 1, если sort
отправляет что-то в FD 2, он перейдет в STDOUT
, тогда как в версиях 2 и 3, которые производят, перейдет в STDERR
.
С точки зрения "предпочтительного варианта", необходимо действительно использовать что-то больше как это (предположение, что Вы хотите echo
STDERR
перейти в sort
):
echo -en "C\nB\nA\n" 2>&1 | sort
Это работает, потому что FD 1 уже переходит в STDOUT
по умолчанию просто имейте копию FD 2 описание файла к его дескриптору.
Закончите строку путем нажатия Ctrl+C. Это будет похоже
[user@box ~]$ Are you there?^C
ETA: Ctrl+C отправляет сигналу SIGINT, который в этом контексте в основном означает "остановку, что я делаю и даю мне назад подсказку". Это все равно как тогда, когда Вы запускаете программу от своей подсказки и нажатие Ctrl+C - это закроет под управлением программу и даст Вам Вашу подсказку назад. Кроме этого случая Вы на самом деле не запустили программу.
Это может быть полезно в других ситуациях также, например, когда у кошки был танец на всем протяжении клавиатуры...
Просто прокомментируйте свое сообщение путем предварительного ожидания a #
к нему. Таким образом, ничто из того, что Вы пишете, не будет обработано, ни расширено оболочкой.
[xxx@slc04lyo abc]$ # Hello, this is dog. I will use the box for some time
Примечание: Если Вы забываете писать #
во-первых, можно поразить Высокий звук + #, чтобы прокомментировать текущую строку и возвратиться к подсказке в единственном перемещении. Это работает с использованием подсказок GNU Readline
, такой как удар, ksh, mysql, Python, zsh и многие другие.
Вот краткое изложение сочетаний клавиш readline's GNU.
Существует a :
команда, которая ничего не делает и игнорирует ее аргументы (путь назад, когда, это использовалось для меток маркировок для использования goto
команда.)
$ : Hi this is X. I will use the box for some time
$
[Редактирование: Как @llua указывает, оболочка все еще проанализирует командную строку, таким образом, любые несбалансированные фигурные скобки, кавычки, одинарные левые кавычки, и т.д. приведут к подсказке продолжения, и точка с запятой, канал, и т.д. завершит команду.]
Если Вы хотите иметь двухсторонний чат с другим пользователем, ввести cat >/dev/null
и затем введите все, что Вы хотите; не будет никакого вывода кроме того, что Вы вводите. Введите Ctrl-C для завершения cat
.
$ cat >/dev/null
Are you there?
yes I am.
^C
:
или #
в моем случае я использовал бы двоеточие в качестве тире, нуждаются во мне для ввода заглавных букв +, двоеточие
– Kiwy
16.01.2014, 13:29
: Mark's answer
заставит оболочку ожидать окончания '
.
– llua
16.01.2014, 14:34
Можно просто ввести echo Hi this is X. I will use the box for some time
нет?
Если Вы хотите избежать какого-либо выходного сигнала, можно также рассмотреть:
echo Hi this is X. I will use the box for some time &> /dev/null
это перенаправит ошибку и вывод этой команды в null
. ==> никакой вывод вообще.
Можно также использовать комментарий как это:
# Hi this is X. I will use the box for some time
если Ваше использование оболочки, которая не использует #
как метка комментария просто используют ту, к которой Вы привыкли.
echo
все еще имеет вывод. Я не должен видеть вывод. Другой пользователь уже находится в VNC, и видьте то, что я ввел. таким образом, вывод является лишним.
– Geek
16.01.2014, 13:23