#linux #perl
#linux #perl
Вопрос:
Я использую скрипт Perl для поиска данных, необходимых для устранения ошибок другого процесса. В OSX эти строки в скрипте Perl открывают необходимые сайты и файлы в моем браузере и текстовом редакторе. Вот код, который работает в OSX:
if ($^O eq "darwin") {
system `open -a /Applications/Firefox.app https://site`;
system `open -a /Apopen -a /Applications/Komodo.appplications/Komodo.app file1.md file2.md`;
system `open -a /Applications/Komodo.app file3.md`;}
Я могу запускать этот скрипт повторно, и приложения будут добавлять вкладки с новыми открытыми файлами.
Однако мне нужно будет запустить тот же инструмент в Linux, и я не нашел никакого способа сделать это. Вот как я пытался адаптировать его к Linux.
if ($^O eq "linux") {
system `firefox local_file.html amp; disown`;
system `firefox https://site1 https://sitex amp; disown`;
system `komodo file1 file2 filex amp; disown`;
}
С тех пор я настроил скрипт Perl так, чтобы он выводил оболочку, которую я могу запускать из командной строки (последняя версия согласно предложению @Grant McLean):
xdg-open https://www.site1 amp; disown
xdg-open https://www.site2 amp; disown
xdg-open /home/.../file1.html amp; disown
xdg-open /home/.../file2.md amp; disown
xdg-open /home/.../file3.md amp; disown
Я понял из предложения @Grant McLean, что если бы я интегрировал его в сценарий Perl, строки были бы, например,
system "xdg-open { file | site } amp; disown";
Но поскольку оболочка зависает в системе, я предполагаю, что передача команд в систему из скрипта Perl также приведет к зависанию системы.
Я хочу, чтобы браузер и текстовый редактор могли открывать файлы из командной строки, и мне не нужно было открывать файлы по отдельности в каждом приложении. Есть идеи?
Комментарии:
1. является ли пропущенное пространство перед https преднамеренным?
2. Тот факт, что ваш код использует оба
system
и обратные ссылки, немного странный.system
Функция выполнит команду, кавычки обратного хода также выполнят команду, захватят выходные данные и вернут их. Обычно вы пользуетесь тем или иным способом. Может быть, вы хотитеsystem "xdg-open https://site /Users/.../File2.html"
для браузера один.3. @jhnc Нет, я набрал вместо того, чтобы скопировать и неправильно напечатал его. Теперь я исправил эту ошибку. Спасибо.
4. @Эбигейл, спасибо, что ответила. Это единственные строки скрипта Perl, которые обращаются к системе.
5. Вы по-прежнему используете обе кнопки возврата и
system
. Почему?
Ответ №1:
Решение было вариацией того, что предложил @grantmclean. Его решение не сработало, когда я попробовал его, потому что я пытался xdg-open
использовать более одного файла или сайта одновременно. Открытие по одному за раз работает:
if ($^O eq "linux") {
system "xdg-open https://site1 amp;";
system "xdg-open https://site2 amp;";
my @tWs = split / /,$tW_files;
foreach (@tWs) {
system "xdg-open $_ amp;" # opens a series of local files
}
system "xdg-open file_y amp;";
system "xdg-open file_z amp;";
}
Моя благодарность вам всем!