Конструкция << EOF
... EOF
называется здесь -документом, и вы можете поместить любую строку в качестве разделителя, но обычно используется EOF
.
Проблема, с которой вы столкнулись, заключается в том, что здесь -документ действует как строка в двойных -кавычках, поэтому переменные и подстановка команд в нем расширяются при запуске cat
, они не сохраняются, как -в результирующем файле. Это, вероятно, не то, что вы хотите, так как вы установили, например. R_func
в batch_x.sh
, которое вы пишете, но ${R_func}
расширится до любого значения R_func
в генерирующем скрипте.
Вы можете предотвратить это, заключив в кавычки разделитель документа здесь -, т. е. вместо этого используйте cat << 'EOF'
. Однако это предотвращает расширение всех переменных, поэтому вы не можете расширить одну и другие, не создавая файл по частям или используя разделитель без кавычек и экранируя все переменные, кроме одной, как в Ответ дяди Билли .
Теперь, если я правильно понял вашу мысль,вы хотите создать 26 скриптов, в одном из которых каждая буква жестко -закодирована. Первый сценарий, который вы создаете (batch_A.sh
), выглядит примерно так:
module load R/3.5.1
R_func="/home/dir/R_func"
....
for AF in ${BASE}/A*.txt_step3; do
Rscript ${R_func}P_tools.R \
...
done
Вместо этого вы можете создать только один сценарий, как показано ниже, и передать ему букву в качестве аргумента командной строки. Первый аргумент командной строки доступен как"$1"
:
#!/bin/bash
module load R/3.5.1
R_func="/home/dir/R_func"
TREAT="/home/dir/POP"
BASE="/home/dir/base"
OUTPUT="/home/dir/tmp"
letter=$1
for AF in ${BASE}/${letter}*.txt_step3; do
Rscript "${R_func}P_tools.R" \
--ptool "${R_func}/P_tools_linux" \
--group "${AF}" \
--treat "${TREAT}/pop_exclude24dup" \
--out "${OUTPUT}/OUT_$(basename "${AF%%_txt_step3}")_noregress" \
--binary-target F;
done
Переменная letter
теперь будет браться из командной строки, поэтому вы можете запускать batch.sh A
для обработки файлов A
и т. д.
Я не эксперт по imagemagick, но мне было проще сначала создать черную часть с помощью caption:
, которая сделает перенос текста за вас. Затем добавьте изображение автомобиля (без черной части ). Надеюсь, этого будет достаточно, чтобы вы продвинулись к желаемому решению.
В качестве отправной точки я вручную обрезал изображение до автомобиля, в 3WL51.jpg
, размер 1650x1232, и использовал 500x1232 в качестве желаемой дополнительной черной части.
caption="1925 Ford Model A Touring Car
*
Front Engine Rear Wheel Drive"
font=/usr/share/fonts/liberation/LiberationSans-Regular.ttf
file=3WL51.jpg
convert -size 500x1232 -font "$font" \
-pointsize 80 -background "#0008" -fill white \
-gravity center caption:"$caption" \
"$file" +swap +append out.jpg