В чем разница между вводом данных для команды через аргумент этой команды и вводом данных через оператор перенаправления оболочки?

Чтобы исправить это, сначала проверьте, установив логическое значение динамически (еще не постоянным):

/usr/sbin/setsebool httpd_can_network_connect 1

Если это сработает, вы можете настроить его таким образом, чтобы политика по умолчанию изменялась, и этот параметр сохранялся при перезагрузке:

/usr/sbin/setsebool -P httpd_can_network_connect 1

Кредит:https://web.archive.org/web/20190313023936/http://sysadminsjourney.com/content/2010/02/01/apache-modproxy-error-13permission-denied-error-rhel/

0
25.01.2020, 22:01
2 ответа

В вашей первой команде($ grep 'root' /etc/passw)вы передаете аргумент/ы для grep, и он интерпретирует его как имя файла и ищет его. Это(grep)терпит неудачу, поэтому сообщает вам, что произошло. Именно grep интерпретирует ваш ввод и действует на него.

Во второй команде(grep 'root' < /etc/passw)вы делаете оболочку (здесь:bash)для передачи /etc/passwна стандартный ввод grep. Он(bash)не может его найти и сообщает вам об этом. Здесь именно bash интерпретирует ваш ввод и действует на него.

Вторая команда концептуально эквивалентна $ bash-cat /etc/passw | grep 'root', где bash-catбудет работать как cat, которая выводит заданный файл на стандартный вывод. Затем он будет перенаправлен на grep.

$ bash-cat /etc/passw | grep 'root'

bash-cat: /etc/passw: No such file or directory

--

Если вы читали о трубах, вы поймете.(Трубы :Краткое введение)

0
28.01.2020, 02:54

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

Итак, если у вас есть программа, скажем, awk— и вы используете перенаправление <для передачи имени файла, и вы пытаетесь напечатать FILENAME, для какого файла она открыта, будет сообщено -(, что означает, что ввод stdin ); см. следующий вывод:

awk '{ print FILENAME }' --infile
--infile

awk '{ print FILENAME }' <--infile
-

Еще одним преимуществом является то, что если имя файла начинается с дефиса, оболочка обработает его сама, но если вы передадите команду в качестве аргумента, скажем grep, она будет жаловаться, потому что считает, что предоставлена ​​недопустимая опция.

grep root --infile
grep: unrecognized option '--infile'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

Стандартные, совместимые со стандартами -команды используют --, чтобы избежать этой ошибки, сообщая команде, что это конец аргумента опции -. Вы также можете указать либо абсолютный путь к файлу, либо относительный путь с помощью ./--infle, либо позволить оболочке открыть его для команды с помощью command <--infile.

примечание :Использование <inputfile commandявляется тем же вариантом command <inputfile.

Еще одним преимуществом является то, что если этот файл не существует или оболочка не может его открыть, то ваша команда не будет выполнена.

awk 'BEGIN{ print "ifrun" }' < non-existing_file
-bash: non-existing_file: No such file or directory

awk 'BEGIN{ print "ifrun" }' non-existing_file
ifrun
0
28.01.2020, 02:54

Теги

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