канал в оболочке с перенаправлением

[117025] Как поясняется в комментариях Makefile, в этом Makefile есть две части. Это потому, что он будет прочитан дважды. Сначала при вызове make из командной строки, затем по kbuild.

mysqldump -u user -p databasename > dump.sql

Если [117382]KERNELRELEASE[117383] не определено, то это потому, что файл читается по make. У вас есть Makefile, который вызывает опцию [117384]-C[117385] для изменения каталога на то место, где находится исходный код вашего ядра.

scp dump.sql user@remotehost.ip:

Make затем читает Makefile там (в каталоге исходников ядра). [117386]SUBDIRS[117387] находится там же, где и исходный код вашего модуля. (Думаю, [117388]SUBDIRS[117389] устарел и теперь вместо него используется [117390]M[117391]).

mysql -u user -p databasename < dump.sql

Система сборки ядра будет искать Makefile в каталоге вашего модуля, чтобы узнать, что нужно собрать. [117392]KERNELRELEASE[117393] будет установлен, так что эта часть будет использована :

Больше информации вы найдете в [117394]документации ядра[117395].[117034].

1
29.03.2015, 20:46
3 ответа

Ваше понимание не совсем верно. В a | b выход stdout процесса a соединен через трубу с stdin процесса b. Проблема с вашим кодом заключается в том, что при дополнительном перенаправлении с somefile на процесс b вы будете использовать два разных метода одновременно для подключения к stdin процесса b. Не делайте этого! Вопрос в том, чего Вы пытаетесь достичь (с такой конструкцией) в первую очередь?

.
3
27.01.2020, 23:13
-

Вы не говорите, какую оболочку вы используете. Судя по поведению, которое Вы описываете, скорее всего zsh. Если вы посмотрите на его man-страницу, вы заметите, как обрабатываются перенаправления.

Обратите внимание, что труба - это неявное перенаправление; таким образом

 cat bar | сортирует 

эквивалентно cat bar foo | sort (обратите внимание на порядок входов).

В противном случае, регулярное поведение, например, что одно из bash заключается в том, что каждое перенаправление заменяет предыдущее перенаправление для этого файлового дескриптора.

zsh man page продолжается:

Если опция MULTIOS не установлена, то каждое перенаправление заменяет предыдущее перенаправление для этого файлового дескриптора. Однако, все файлы переадресованные на фактически открытые, так что

 echo foo > bar > baz

когда MULTIOS не установлен, усекает бар и записывает ''foo'' в baz.

3
27.01.2020, 23:13

because you are taking input of less from somefile.

it works like this

1 -> execute ls , as you have used pipe , it will pipe stdout to stdin of next command : this is what you are telling

2 -> it will look second command.. it is less < somefile

as soon as it sees '<' redirection it will change stdin again to the file... Hence your previous change because of '|' is getting lost.

well, you can say it like this : less have taken input from file , it has nothing to do with ls's output.

1
27.01.2020, 23:13

Теги

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