Когда следует использовать & lt; или & lt; () или & lt; и & gt; или & gt; ()?

Вот пример сценария, который я написал. [F3] означает «все аргументы переданы». Важно отметить, что они заключены в кавычки, потому что в противном случае белая область нарушит команду. Кстати, это не так.

jake@daedalus:~$ cat bin/play
#!/bin/bash
quodlibet --query "$*"
quodlibet --next
jake@daedalus:~$ play garrison keillor rhubarb pie

Как и Fido, не забудьте установить файл как исполняемый с помощью chmod +x programName.

Что-то, рассмотрим создание каталога bin в вашей домашней папке и добавление его в ваш $PATH. Тогда вы можете вызвать команду независимо от того, в какой папке вы находитесь. У меня есть эта строка в моем .bashrc: PATH=$HOME/bin:$PATH. Если вы этого не сделаете, вы используете абсолютный или относительный путь, когда вы вызываете свой скрипт, то есть:

jake@daedalus:/usr/local/share/docs$ /home/jake/bin/play foo fighters everlong
jake@daedalus:~/bin$ ./play placebo where is my mind

Я очень рекомендую руководство Grymoire по сценарию SH. То, что вам нужно сделать, это использовать позиционные параметры оболочки для принятия аргументов и вставки их в вашу команду. Кроме того, TLDP использует более глубокую обработку позиционных параметров BASH. Я начну с Grymoire, а затем прочитаю TLDP, когда вы будете готовы к более продвинутой обработке предмета.

1
задан 7 February 2017 в 20:54

1 ответ

Ответ Оли уже дает много объяснений. Моя цель в этом ответе - предоставить несколько практических примеров.

Перенаправление ввода с помощью [команды] & lt; file

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

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

 while read FILENAME; do [ -d $FILENAME  ] && echo $FILENAME;done < fileList.txt

Обычно такая команда, как read, принимает входные данные от STDIN, но с помощью оператора < мы вынуждаем его принимать данные из файла.

Перенаправление ввода с [ команда] & lt; file

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

В моем ответе В чем разница между & lt; & lt; & lt; & lt; & lt; и & lt; & Lt; в bash ?, я показал два простых примера wc < <(echo bar;echo foo) и diff <(ls /bin) <(ls /usr/bin). Последнее особенно полезно - мы сравниваем выходы двух команд без создания файла для хранения данных, которые нужно сравнить.

Перенаправление с COMMAND1>> (COMMAND2)

Это эквивалентно трубопроводу.

xieerqi@eagle:~$ df > >(grep "dev" )
xieerqi@eagle:~$ /dev/sda1      115247656 83004376  26365932  76% /
udev             2914492        4   2914488   1% /dev

Как показано в В чем разница между & lt; & lt; & lt; & lt; & lt; и & lt; & Lt; в bash? , это можно использовать для ввода одного и того же ввода в несколько команд

some_command | tee >(grep A > A.out) >(grep B > B.out) >(grep C > C.out) > /dev/null
2
ответ дан 23 May 2018 в 15:51

Другие вопросы по тегам:

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