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

#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;";
}
 

Моя благодарность вам всем!