#append #tcl #cat
#добавить #tcl #cat
Вопрос:
Я хочу подключить или объединить 2 файла вместе. Что лучше использовать exec cat или append?
Ниже приведен мой сценарий cat, но, похоже, он не работает.
set infile [open "$dir/1.txt" w ]
puts $infile "set a 1"
puts $infile "set b 2"
exec /bin/cat "$dir/1.txt $dir2/ABC1.sh" > final.sh
close $infile
Комментарии:
1. Я бы ожидал увидеть ошибку «файл не найден» от cat с
"$dir/1.txt $dir2/ABC1.sh"
кавычками в виде одного слова.
Ответ №1:
Бьюсь об заклад, «похоже, не работает» означает, что вы видите только содержимое $dir2/ABC1.sh
in final.sh
(или, возможно, видите часть того, что вы пишете $fir1/1.txt
, а не все данные). Если это так, вы сталкиваетесь с проблемами буферизации, пытаясь прочитать $dir/1.txt
перед закрытием или сбросом infile
, как вы. Данные еще не были записаны в базовый файл.
Для объединения нескольких файлов в один, вместо того, чтобы полагаться на внешнюю программу, например cat
(могут быть проблемы с тем, как вы цитируете аргументы exec
, тоже …), Я бы использовал различные процедуры из модуля fileutil из tcllib, чтобы сделать это в чистом виде tcl
:
package require fileutil
fileutil::writeFile final.sh [fileutil::cat -- $dir/1.txt $dir2/ABC1.sh]
Если у вас большие файлы и вы не хотите хранить их все в памяти (или не хотите / не можете установить tcllib), chan copy
также будет работать:
set outfile [open final.sh w]
foreach file [list $dir/1.txt $dir2/ABC1.sh] {
set sourcefile [open $file r]
chan copy $sourcefile $outfile
close $sourcefile
}
close $outfile
Комментарии:
1. Да, я вижу только содержимое $dir2/ABC1.sh в final.sh .
2. Версия с
chan copy
хорошей и правильной.