2015-08-06 5 views
1

Я знаю, что здесь много сообщений о heredocs, а также о перенаправлениях и дескрипторах файлов, но я не могу найти ничего, что связано с тем, что я хочу делать.heredoc's, перенаправления и дескрипторы файлов

Я хочу открыть файловый дескриптор в файл, а затем записать heredoc в этот дескриптор файла.

Вот что я с помощью оболочки Bash:

exec 3>/tmp/testfile.txt 
cat <<EOF>>3 
write to fd using heredoc 
EOF 

проверить мой файл и его пустым. Я принимаю его пустым, потому что ссылка на мой файловый дескриптор в heredoc идет в бит-ведро. Я попытался использовать амперсанд & вот так EOF>>&3, но это вызывает ошибку в оболочке.

Как я могу добиться этого?

ответ

-1

OK вот ответ:

exec 3>/tmp/testfile.txt 
cat <<EOF 1>&3 
this is a redirect to fd 3 via a heredoc 
EOF 
+0

Да, это правильно. Но вам нужно объяснить, что вы делаете. Также, пожалуйста, научитесь писать код, затем отстудите его, выбрав его и используя кнопку ** '{}' ** над полем редактирования. Это выглядит лучше, чем использование встроенного кода, заключенного между обратными кавычками. Он также позволяет вам писать обратные кавычки в вашем сценарии оболочки, хотя вы, как правило, не должны использовать их в любом случае. –

+0

Причина, по которой я хотел использовать fd в этом экземпляре, - это легко разрешить функции определять, создается ли fd, тогда это нормально писать, иначе не пытайтесь. Я использую его с несколькими другими функциями для создания динамического html-файла с использованием heredoc. – todd1215

+0

Это выглядит очень ужасно, как то, что я сказал. Если мой ответ решил вашу проблему, вежливо проверить галочку слева от ответа. – larsks

2

Если вы пишете:

echo something >> 3 

Это создаст подал называется 3. Если вы хотите обратиться к файловому дескриптору, вам нужно использовать синтаксис &3. Если вы хотите добавить в файл с помощью дескриптора файла, вы можете сделать это:

exec 3>>/tmp/testfile.txt 
cat <<EOF >&3 
This is a test. 
EOF 

То есть, вы решили добавить по сравнению с перезаписью при открытии файла дескриптора с exec заявления. Если вы это сделали:

exec 3>/tmp/testfile.txt 

Это заменило бы файл, а не добавлял его.

+0

Я столкнулся с проблемой здесь с heredoc и переадресацией.Если я открою файловый дескриптор (fd3) в файл, как это сделать, что другие функции, которые я записываю в STDOUT, записываются в дескриптор файла? – todd1215

+0

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

+0

Вот новый вопрос, размещенный http://stackoverflow.com/questions/31944900/stdout-output-getting-written-to-custom-file-descriptor – todd1215

0

Руководство Bash для append redirection говорит:

Общий формат для добавления вывода является:

[n]>>word 

Вы приложили к файлу 3. Однако на практике вам не нужен оператор >>; вам нужно послать стандартный вывод cat в дескрипторе 3:

cat <<EOF 1>&3 
write to fd using heredoc 
EOF 

Это не обрезает файл, так что он достигает «Append» в любом случае.

Смежные вопросы