Как мне написать одну командную строку, которая запускает новый док-контейнер с интерактивным bash и выполняет в нем несколько команд?

Непонятно, каков формат ваших исходных файлов и формат ожидаемого вывода (, например. odf, sxw, xls, xlsx, csvи т. д.)

Простейший случай :всеcsv

Затем вы можете использовать команду bash paste:

paste <(cat file1.csv) <(cat file2.csv) > out.csv

Затем откройте out.csvв libreoffice:

libreoffice --calc out.csv

Сложный случай:xlsили odfили другое:

В таких случаях я бы рекомендовал преобразовать их в csvи использовать трюк, как описано выше.

libreoffice --convert-to csv file1.xls
libreoffice --convert-to csv file2.xls
paste <(cat file1.csv) <(cat file2.csv) > out.csv
libreoffice --calc out.csv

Если вы хотите, чтобы выходные данные сохранили форматирование и другие свойства, вам придется использовать другие инструменты. Еще один похожий инструмент, который вы можете попробовать, это oooPy, хотя, должен признаться, я никогда им не пользовался! Также не уверен, работает ли он с последней версией libreoffice.

0
08.05.2020, 00:51
1 ответ

Сделайте это командой bash, заканчивающейся окончательным вызовом bash, чтобы получить интерактивную подоболочку:

docker run --interactive --tty ubuntu:18.04 bash -c "apt update; apt install -y git nano wget; mkdir t; cd t; exec bash"

execexec необходим, чтобы сделать новый bash основным процессом контейнера, что рекомендуется (он будет получать прерывания, отправляемые в контейнер ).

При этом вы должны поместить вызовы aptв Dockerfile и сгенерировать производный образ, который вы можете запустить непосредственно с помощью интерактивного bash:

FROM ubuntu:18.04
RUN apt update && apt install -y git nano wget
RUN mkdir /somedir
WORKDIR /somedir

Сделайте один раз для всех (или пока вам не понадобятся более новые версии):

docker build -t testbuild.   # done once for all

и

docker run -it testbuild  # bash already in /somedir
3
28.04.2021, 23:15

Теги

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