Я надеялся сделать скрипт оболочки, который позволит мне открыть все файлы, которые я использую во время выполнения определенного задания. В этом случае, оценивая задания бакалавров. Второй файл находится в директории выше первого.
Только первый файл открылся следующим образом:
#! /bin/bash
cd '/home/me/Dropbox/00-School/03-TA POLI 397/Assignment'
libreoffice grading-instructions.odt
cd ../
evince 'POLI 397 Assignment.pdf'
Как я могу написать скрипт оболочки, который одновременно открывает каждый файл, который я ищу?
Прежде всего, нет необходимости 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'
, и он откроет каждый файл в соответствующем инструменте и будет работать с таким количеством файлов, как вы хотите дать его.
После немного больше звонили, я нашел свой собственный ответ. Чтение и реализация нескольких посудов совет из Это Вопрос получил мне, что я искал, и я подумал, что собираюсь объединить все это в этот вопрос, чтобы помочь будущим нубов, которые хотят сделать то же самое.
Если бы я использовал CD ../
Bash пытается открыть файлы из того же каталога. Сценарий находится в. Ввод пути к файлу напрямую работал.
Размещение &
после каждой строки, которая открывает файл, приводит к выполнению следующих строк. Мой настоящий сценарий открывает еще несколько файлов, но этот пример кажется достаточным.
Мой рабочий скрипт:
#! /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'