Можно ли использовать несколько here-документов для ввода команды в bash?
$ cat <<<foo <<<bar
bar
$ cat <<EOF1 <<EOF2
> foo
> EOF1
> bar
> EOF2
bar
Очевидно, что в обоих случаях второй here-документ используется как stdin и заменяет первую ссылку. Является ли решение использовать echo
s вместо?
$ cat <(echo -n foo) <(echo bar)
foobar
Кроме того, по какой-то причине использование комбинации не работает для меня. С чего бы это?
$ cat <<<foo <(echo bar)
bar
$ cat <(echo -n foo) <<<bar
foo
bash
io-redirection
here-document
Sparhawk
источник
источник
paste
с фиктивными входами. Я полагаю, я могу придумать несколько других сценариев. Если бы у меня был сценарий с предварительно обработанным текстом в нескольких переменных, я мог бы захотеть сделать что-то для обоих с помощью команды, которая, например, принимает только файлыdiff
.cat <<EOF1 <<"EOF2"
.Ответы:
Ты можешь сделать:
Может быть только один стандартный ввод, так как существует только один дескриптор файла 0.
это сокращение от:
И:
является:
Вы должны решить, что открыть по дескриптору файла 0.
Является:
Где
123
дескриптор файла для канала, и параллельно bash запускаетсяecho foo
в другом процессе с stdout, перенаправленным на другой конец канала.Как только вы передадите имя файла
cat
,cat
больше не читайте из стандартного ввода. Вам нужно:Или:
(
-
это сказать,cat
чтобы читать из стандартного ввода).источник
cat <<EOF
не совсем то же самоеcat /dev/fd/0...
: в последнем случаеcat
видит имя файла и открывает.cat
считывается из егоfd
0, как если бы передан аргумент-
или/dev/fd/0
(хотя в Linux (и только в Linux)) открытие/dev/fd/0
не совсем похоже на дублирование дескриптора файла 0)./dev/fd/3 3<< E1
конструкцией, и мне интересно, что именно это за элементы в / dev / fd /. Хотя они каким-то волшебным образом выглядят после того, как процесс открывает файл где-то в файловой системе, за исключением 1 и 2, которые существуют по умолчанию для каждого процесса. Но в вашем примере вы используете файловые дескрипторы 3 и 4, которые не связаны ни с каким реальным файлом, кроме перенаправления ввода. Я не могу понять это в моей ментальной модели файловых дескрипторов. Что если процесс захочет открыть другой файл, узнает ли он, что должен использовать fd 5? Должны ли fds быть 3, 4, 5 .. или может быть что угодно?