Открытие нескольких файлов одновременно с помощью скрипта оболочки

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

Только первый файл открылся следующим образом:

#! /bin/bash
cd '/home/me/Dropbox/00-School/03-TA POLI 397/Assignment'
libreoffice grading-instructions.odt
cd ../
evince 'POLI 397 Assignment.pdf'

Как я могу написать скрипт оболочки, который одновременно открывает каждый файл, который я ищу?

2
задан 15 March 2021 в 20:30

2 ответа

Прежде всего, нет необходимости CD в каталог, чтобы открыть в нем файл. Вы можете просто использовать полный (или относительный) путь к файлу. Итак вместо CD FO , а затем LibreOffice bar.doc , вы можете просто сделать LibreOffice Foo / bar.doc .

Теперь следующий выпуск открывает несколько файлов. Когда вы запускаете скрипт, каждая команда в этом скрипте будет выполнена последовательно, и скрипт будет дождаться первой команды, чтобы закончить, прежде чем запустить вторую. Вот почему ваш сценарий был только открыть только один файл, он ждал до первого LibreOffice , который выступил, чтобы перейти к вызову Evince .

Если все, что вам нужно, это открыть два файла, все, что вам нужно, это:

#!/bin/bash
libreoffice '/home/me/Dropbox/00-School/03-TA POLI 397/Assignment'/grading-instructions.odt & 
evince '/home/me/Dropbox/00-School/03-TA POLI 397/POLI 397 Assignment.pdf '

Вам даже не нужен сценарий для этого. Вы можете вставить это непосредственно в терминал:

libreoffice '/home/me/Dropbox/00-School/03-TA POLI 397/Assignment'/grading-instructions.odt & 
evince '/home/me/Dropbox/00-School/03-TA POLI 397/POLI 397 Assignment.pdf'

Хитрость состоит в том, чтобы использовать & после первой команды, чтобы отправить ее на фоновом режиме и позволить оболочку перемещаться в следующую команду.

Вы можете еще больше упростить с помощью XDG-Open , которые найдут программу по умолчанию для обработки каждого файла и с XDG-Open , вам даже не нужно отправлять первый На заднем плане с XDG-Open вернется, как только он запускает любую программу, используется для соответствующего типа файла:

#!/bin/bash
xdg-open '/home/me/Dropbox/00-School/03-TA POLI 397/Assignment'/grading-instructions.odt 
xdg-open '/home/me/Dropbox/00-School/03-TA POLI 397/POLI 397 Assignment.pdf'

с этим в виду, вы можете написать общий скрипт, который принимает список n Имена файлов в качестве ввода и открывают каждый из них:

#!/bin/bash

## Iterate over all file names given on the command line
for file in "$@"; do
    ## open each file
    xdg-open "$file"
done

Если вы экономите это как ~ / bin / openfiles.sh и сделайте его исполняемым ( chmod a + x ~ / bin / openfiles.sh ) Теперь вы можете запустить:

openFiles.sh '/home/me/Dropbox/00-School/03-TA POLI 397/Assignment'/grading-instructions.odt' 
'/home/me/Dropbox/00-School/03-TA POLI 397/POLI 397 Assignment.pdf'

, и он откроет каждый файл в соответствующем инструменте и будет работать с таким количеством файлов, как вы хотите дать его.

5
ответ дан 18 March 2021 в 23:25

После немного больше звонили, я нашел свой собственный ответ. Чтение и реализация нескольких посудов совет из Это Вопрос получил мне, что я искал, и я подумал, что собираюсь объединить все это в этот вопрос, чтобы помочь будущим нубов, которые хотят сделать то же самое.

  1. Если бы я использовал CD ../ Bash пытается открыть файлы из того же каталога. Сценарий находится в. Ввод пути к файлу напрямую работал.

  2. Размещение & после каждой строки, которая открывает файл, приводит к выполнению следующих строк. Мой настоящий сценарий открывает еще несколько файлов, но этот пример кажется достаточным.

Мой рабочий скрипт:

#! /bin/bash
cd '/home/me/Dropbox/00-School/03-TA POLI 397/Assignment'
libreoffice grading-instructions.odt &
cd '/home/me/Dropbox/00-School/03-TA POLI 397'
evince 'POLI 397 Assignment.pdf'
1
ответ дан 18 March 2021 в 23:25

Другие вопросы по тегам:

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