Вставка результатов для цикла в файл HTML - Bash

startx и xinit возьмите X-клиент на их командной строке. Это может быть названием менеджера окон или менеджера сеансов.

startx awesome

Если Вы не передаете этот аргумент, то они запускают скрипт ~/.xinitrc, который ответственен за запуск Вашего менеджера окон. В отсутствие этого файла они используют некоторое системное значение по умолчанию.

0
27.05.2013, 09:12
3 ответа

Замены параметра могут использоваться для замены текста без любых проблем выхода:

output=$(ls -t downloads | while IFS= read -r f; do
    echo "<a href=\"downloads/$f\">$f</a>"
done)

html=$(<index.html)
html=${html/placeholder/$output}
echo "$html" > output.html

Вы могли также использовать awk -v передать текст замены как переменную:

awk -v v="$output" '{sub("placeholder",v);print}' index.html > output.html

Или используйте Ruby для замены многострочного шаблона, не требуя заполнителя:

echo "$output" | ruby -i -e 'print gets(nil).sub(/<a .*<\/a>\n/m, STDIN.read)' index.html
1
28.01.2020, 02:53

Если Вы просто хотите заменить все содержание файла, вместо того, чтобы так или иначе вставить Ваш вывод в середине, то Ваша попытка № 1 может быть ближе к тому, на основе чего Вы хотите, чем подход sed, если Вы перенаправляете вывод всего цикла:

#!/bin/bash

list_dir=`ls -t downloads/`

for i in $list_dir
do
    echo "<a href=\"downloads/$i\">$i</a>"
done > index.html
0
28.01.2020, 02:53
  • 1
    Спасибо за Ваш ответ. Я сделал бы это, но существует HTML-код, который должен быть сохранен так, я должен вставить результаты в определенное место. –  tyler 27.05.2013, 08:21

Существуют многочисленные проблемы с Вашим sed строка, например, с переменной $i в одинарных кавычках, никогда не расширяемых.

Учитывая следующий index.html:

<html>
<body>
<!-- placeholder -->
</body>
</html>

попытайтесь использовать посреднические файлы для sed в/производить:

#!/bin/bash

list_dir=`ls -t downloads/`

cp index.html out.html

for i in $list_dir
do
   sed "s/<!-- placeholder -->/<a href='downloads\/$i'>$i<\/a>\n<!-- placeholde
r -->/" out.html > tmp.html
   mv tmp.html out.html
done
cat out.html

Конечно, Вы столкнетесь с проблемами, когда будут имена файлов с пробелами в них, но это - другая проблема.

0
28.01.2020, 02:53

Теги

Похожие вопросы