LINUX.ORG.RU

help. модифициировать скрипт

 


0

2
#!/bin/bash

cd /root/code/ || exit

test -e compiled || mkdir compiled
rm -f temp.txt

for sourcefile in /root/jenkins/*.dst
do
        echo -n "Compiling $sourcefile ..."
        ./compile "$sourcefile" >> temp.txt
        echo "done"
done

less temp.txt
rm temp.txt

Прошу помощи с модификацией скрипта. Баш не умею, но как смог

Что сейчас делает скрипт:

компилирует все плагины по расширению в определённом каталоге, записывает вывод в .txt, по завершению принтует всё, что есть в .txt и удаляет .txt

Чего хочу достичь:

после каждого скомпилированного плагина делать вывод результата его компиляции, соответственно всё это в цикле по маске

★★

Последнее исправление: BitSum (всего исправлений: 1)

А зачем тут вообще temp.txt?

#!/bin/bash

cd /root/code/ || exit

test -e compiled || mkdir compiled || exit

for sourcefile in /root/jenkins/*.dst
do
        echo -n "Compiling $sourcefile ..."
        ./compile "$sourcefile"
        echo "done"
done

Кому надо почитать вывод может запускать скрипт так ./скрипт.sh | less или вообще прокручивать в эмуляторе терминала, как все и делают в 2018 году. Можно одновременно сохранять на будущее, компилировать и просматривать вот так./скрипт.sh | tee compile.log | less.

Ну и напоследок замечу, что для компиляции лучше использовать make - так и файл короче, и многопоточность из коробки, примерно так

Makefile:

SOURCES=/root/jenkins/*.dst
OBJECTS=$(SOURCES:.dst=)

compiled/%: /root/jenkins/%.dst
        ./compile $@

all: $(OBJECTS)

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Ну и напоследок замечу, что для компиляции лучше использовать make - так и файл короче, и многопоточность из коробки, примерно так

make: *** No rule to make target '/root/jenkins/*', needed by 'all'. Stop.

BitSum ★★
() автор топика
Последнее исправление: BitSum (всего исправлений: 1)
Ответ на: комментарий от BitSum
SOURCES=$(wildcard /root/jenkins/*.dst)
OBJECTS=$(SOURCES:.dst=)

compiled/%: /root/jenkins/%.dst
        ./compile $@

all: $(OBJECTS)

Если у компилированных файлов есть какое-то расширение, то его надо вписать в правила. OBJECTS=$(SOURCES:.dst=.расширение) и compiled/%.расширение: /root/jenkins/%.dst

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

make: Nothing to be done for 'all'.

Использую так: make -f makefile

BitSum ★★
() автор топика
Последнее исправление: BitSum (всего исправлений: 1)
Ответ на: комментарий от aureliano15
name="$(echo -n $sourcefile | sed 's/.*\///;s/\.dst$//').txt"
./compile "$sourcefile" > "$name"

Это имелось в виду?


вывод отсутствует

cd /root/code/ || exit

for sourcefile in /root/jenkins/*.dst
do
        name="$(echo -n $sourcefile | sed 's/.*\///;s/\.dst$//').txt"
        ./compile "$sourcefile" > "$name"
done
BitSum ★★
() автор топика
Последнее исправление: BitSum (всего исправлений: 1)
Ответ на: комментарий от BitSum

вывод отсутствует

Так добавь строчку

cat "$name"

или

less "$name"

после каждой компиляции.

А если сохранять вывод в файлах не надо, то компилируй без перенаправления в файл, как посоветовал legolegs.

aureliano15 ★★
()
Ответ на: комментарий от aureliano15

Сейчас пробую так:

cd /root/code/ || exit

for sourcefile in /root/jenkins/*.dst

do
        name="$(echo -n Compiling "$sourcefile" ... | sed 's/.*\///;s/\.dst$//').txt"
        ./compiler "$sourcefile"
        less "$name"
done

Вывод такой:

результат компиляции
название скомпилированного файла.dst ....txt: No such file or directory

Нужно было так...

название скомпилированного файла.dst
переход на новую строку
результат компиляции
три перехода на новую строку

Нужно поспать... буду дальше пробовать, как проснусь

BitSum ★★
() автор топика
Ответ на: комментарий от BitSum

Выложи список компилируемых файлов (ls /root/jenkins/*.dst) и точный вывод компилятора, когда всё хорошо и когда всё плохо.

UPD:

./compiler "$sourcefile"
less "$name"

Ты или перенаправляй в файл $name и потом его отображай, или, если не перенаправляешь, то и файл txt у тебя не создаётся. Тогда тебе не нужно ни имя name генерить, ни пытаться выводить его.

aureliano15 ★★
()
Последнее исправление: aureliano15 (всего исправлений: 1)
Ответ на: комментарий от aureliano15

Выложи список компилируемых файлов (ls /root/jenkins/*.dst) и точный вывод компилятора, когда всё хорошо и когда всё плохо.

Но зачем?

Это динамичная информация. Сейчас же задача практически выполнена. Пытаюсь понять с чем связано No such file or directory и как выполнить отступы

BitSum ★★
() автор топика
Последнее исправление: BitSum (всего исправлений: 1)
Ответ на: комментарий от BitSum

cd /root/code/ || exit

for sourcefile in /root/jenkins/*.dst

do
        name="$(echo -n Compiling "$sourcefile" ... | sed 's/.*\///;s/\.dst$//').txt"
        ./compiler "$sourcefile"
        less "$name"
done

Вместо less использовал echo. А отступы: echo -e «\\n».

BitSum ★★
() автор топика

test -e compiled

похоже нужно test -d

bl ★★★
()
Ответ на: комментарий от BitSum

Выложи список компилируемых файлов (ls /root/jenkins/*.dst) и точный вывод компилятора, когда всё хорошо и когда всё плохо.

Но зачем?

Это динамичная информация. Сейчас же задача практически выполнена.

Потому что ты сказал, что не работает. Но потом я увидел, почему не работает, и добавил в сообщение блок UPD. Однако прежний абзац на всякий случай оставил: вдруг твои проблемы не только с этим связаны?

Пытаюсь понять с чем связано No such file or directory

С тем, что я предложил сгенернить имя $name, такое же, как имя компилируемого файла, только с расширением .txt, и писать в файл с этим именем вывод компилятора, а потом выводить его содержимое на экран. Ты же переменную $name с именем файла формируешь, но сам файл не создаёшь, т. к. не перенаправляешь в него вывод компилятора. Соответственно, при попытке отобразить файл, less тебе сообщает, что его не существует.

и как выполнить отступы

Какие отступы? Перед выводом компилятора? Если да, то как-то так:

./compiler "$sourcefile" | awk '{print "   " $0}'

Вместо less использовал echo.

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

А отступы: echo -e «\\n».

Если тебе нужны пустые строки, разделяющие вывод разных команд, то достаточно echo без параметров.

bl написал:

test -e compiled

похоже нужно test -d

Если compiled — директория, то однозначно test -d.

aureliano15 ★★
()

man tee, и увидишь не только результаты

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.