Вы можете использовать цикл while
вокруг документа здесь -:
while IFS= read -r x; do
cat << EOF > "${x}_M0.ctl"
seqfile = ${x}_p.phy
treefile = Sametree.txt
outfile = ${x}_M0_mlc
getSE = 0
RateAncestor = 1
Small_Diff = 5e-7
cleandata = 1
fix_blength = 2
method = 0
EOF
done < list.txt
Если строки в вашем list.txt
имеют начальные или конечные символы SPC или TAB, которые должны не интерпретироваться как часть имени файла (, и вы не изменили иным образом переменную IFS
), затем опустите назначение IFS=
перед командой read
:
while read -r x; do
Или явно установите SPC и TAB:
while IFS=$' \t' read -r x; do
(обратите внимание, что расширение его на другие пробельные символы, такие как CR
, FF
, NBSP
... не будет работать, поскольку они не получают специальной обработки пробелов IFS, только SPC, TAB и NL ).
Я переработал скрипт на Python, не зная одной детали:
Сценарий работает на Python 2 и импортирует функцию print
из пакета __future___
как eprint
. Это было напечатано в stderr
, в то время как все, что напечатано сprint
(по умолчанию Python 2 ), было напечатано в stdout
. Это вызвало
print
, отсутствующие в прогоне A, и операторы eprint
для отображения на экране print
должны быть сохранены в "output.txt" в Run B, в то время как операторы eprint
были сохранены stderr
, так и stdout
в файл. Итак, в Run C все было направлено в выходной файл. Однако я до сих пор не могу объяснить обратный порядок. Только использование eprint
решило все мои проблемы.
Спасибо @Panki за то, что направил меня сюда