где находится документация <когда он порождает подоболочку - PullRequest
0 голосов
/ 12 октября 2018

Видимо <и |ведут себя аналогично. </p>

cat file | wc
wc < file

Существует ли название для этого символа '<' при использовании таким образом, чтобы можно было найти его документацию?</p>

man <
man '<'

не раскрывайте ничего;и в веб-поиске символ является неоднозначным, поскольку он используется математически и в качестве префикса строки в электронных письмах.Аналогично, конструкция

if [ -r file ]

может быть переформулирована как

if test -r file

, и затем можно найти страницу руководства для утилиты «test».(Попробуйте найти документацию в квадратных скобках!) Какое имя или строку я ищу, чтобы найти документацию о поведении '<'?Также «<<»?</p>

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Видимо <и |ведут себя аналогично </em>

Есть незначительное сходство, но вы не можете зайти так далеко.Они оба представляют перенаправление .

< перенаправляет стандартный поток ввода (stdin) команды слева для ссылки на файл справа.Команда будет выполняться в своем собственном процессе, только если она является внешней программой (например, wc).

| перенаправляет стандартный поток вывода (stdout) командыслева от стандартного потока ввода (stdin) команды справа.Используемый механизм называется анонимный канал , и обе команды выполняются в своем собственном дочернем процессе.

< и | не являются командами, они являются частью грамматики оболочки, поэтому для них не будет страниц man.Как часть языка bash вы должны использовать man bash, а затем искать REDIRECTION (для <) или Pipelines (для |).

Раздел 1 man страницы предназначены для программ, а не для отдельного языка, такого как оболочка, раздел 2 - для API-интерфейсов ядра, вызываемых из C и т. Д. Поэтому не ожидайте, что детали вашей конкретной оболочки будут отображаться как отдельныесправочные страницы.Таким образом, man bash, man sh, man csh, man zsh и т. Д.

Удивительно, но [ является встроенной оболочкой:

$ type [
[ is a shell builtin

и такжеизвестный как test.Но:

$ type [[
[[ is a shell keyword

[, test, [[ - это все команды , а дополнительная документация доступна в bash с использованием help, например,

$ help [

Итак, как вы узнаете, является ли символ командой или частью грамматики?Изучая язык, другого пути нет.Следуйте инструкциям, прочитайте man bash, посмотрите на примеры, но прежде всего экспериментируйте сами и попробуйте.

Для новичка не легко, но вы должны помнить, что синтаксис оболочки был написан для программистов , чтобы использовать и понимать, он никогда не был предназначен для конечных пользователей.

Вы замечаете (жалуетесь?), Что один и тот же символ используется для разных значений.Это распространено в языках программирования.Например, в C * используется, чтобы квалифицировать объявление указателя, как двоичный оператор умножения, как половину символа комментария и как унарный оператор для разыменования указателя.Есть много других многоцелевых символов на разных языках.Это отчасти потому, что ранние клавиатуры были способны печатать только часть набора из 128 символов ASCII.Попытки использовать операторы Unicode (например, Perl 6) не получили широкого распространения.

0 голосов
/ 12 октября 2018

>, >>, < и | являются частью оболочки.Они не являются командами.

См. man bash (или руководство для вашей оболочки)

| называется каналом.Это название операции, а не символ.> и < называются выходом и перенаправлением ввода.

Две команды

cat file | wc
wc < file

Делают разные вещи, но имеют одинаковый результат (но 2-я более эффективна).

Первый создает канал, затем дважды разветвляется и исполняется (один для cat, один для wc).

Второй перенаправляет stdin, forks и execs один раз (только дляwc).

На тесте и []

Вы правы, что [ является другим именем для test.К сожалению, > и < не являются командами.Таким образом, они не являются справочной страницей для них, но они есть в руководстве для вашей оболочки.Ключевые слова, которые вам нужно знать: перенаправление файла , перенаправление ввода , перенаправление вывода .

Ссылки

https://en.wikipedia.org/wiki/Redirection_(computing)

...