Считайте URL из файла и откройте его на вкладке Firefox

PreTabs.txt файл, который я имею на своем рабочем столе, и он просто содержит строку

google.com

Я хочу передать содержание по каналу того файла в Firefox так, чтобы это открыло URL на новой вкладке.

Если Вы выполняетесь cat PreTabs.txt | firefox,
не был должен это совпасть с firefox [Contents of PreTabs.txt]?

6
задан 28 December 2016 в 14:50

2 ответа

Передача по каналу не является тем же как передачей аргумента программе.

Если Вы запускаете программу, процесс создается. Я упрощаю здесь, но в основном каждый процесс имеет стандарт в и стандарт. Это получает вход через стандарт в (возможно), и производит вывод в его стандарте (возможно). Они сокращены stdin и stdout соответственно.

Когда Вы выполняете программу в терминале, его стандарт в - то, что Вы вводите в терминал в то время как его выполнение. Его стандарт печатается на терминале.

Что Вы делаете, когда Вы выполняетесь a | b должен выполнить обоих a и b но соедините stdout aобработайте к stdin bпроцесс. Таким образом, если aобработайте созданный вывод, он питается, как введено к bпроцесс, точно так же, как, если необходимо было выполнить обоих a и b в отдельных терминалах и типе все aобработайте печать на его терминале в терминал, который Вы выполняете b на. Ну, почти. Можно только сделать текст, например, тогда как процессы могут передать произвольные данные по каналу к другому процессу.

Можно протестировать это путем передачи по каналу данных к tee.

Пример:

echo foo | tee

echo читает его аргументы и пишет им в его stdout. Его stdout подключен с teestdin. Мишень просто читает из своего stdin на на строку основание и пишет свой вход в его stdout. Это означает, что "нечто" будет распечатано к Вашему терминалу, поскольку это - stdout teeпроцесс.

echo foo | tee | tee | tee

Имеет тот же эффект, конечно.

Можно сделать более полезный материал, который довольно прост, также:

echo foo | sha256sum

Это вычисляет и печатает sha256sum "foo\n". Где \n перевод строки потому что echo заканчивает его вывод в переводе строки, иначе предыдущий пример не работал бы потому что tee не видел бы перевод строки.

Так Ваша команда cat PreTabs.txt | firefox выполняется cat с аргументом PreTabs.txt который вызывает cat записать содержание в его stdout. Этот stdout является stdin firefox что означает это firefox может считать его. Это не имеет к и нет никакого правила того, как это должно вести себя на этом. Это похоже на него или не читает его или читает его и затем игнорирует его.

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

Пример:

echo bar > foo
echo `cat foo` > foobar

Первая строка пишет "панель" в файл foo (перезаписывает содержание файла, если это уже существует, иначе создает новый файл). Во второй строке, cat foo выполняется сначала. Это читает свой параметр foo и узнает, что это, как предполагается, читает fooсодержание и печатает их на его stdout. Этот stdout затем вставляется где

`cat foo`

находится во второй строке, таким образом, вторая строка становится

echo foo > foobar

который пишет foo в файл foobar.

Это на самом деле вызывает Firefox, делают к чему-то:

echo "stackexchange.com" > foo
firefox `cat foo`

открывает новую вкладку, загружающую http://stackexchange.com в Firefox.

Вы сказали, что в Вашем случае это загружает файл, имя которого это получило в качестве параметра, и у меня на самом деле есть неопределенное воспоминание о нем ведший себя как этот в прошлом. Это - вероятно, лучшая идея сказать это явно, что сделать:

echo "stackexchange.com" > foo
firefox -new-tab `cat foo`

Это определяется в странице справочника (man firefox) как:

   -new-tab url
          Open url in a new tab.

хотя это могло бы отличаться для Вашей версии Firefox, конечно.

4
ответ дан 23 November 2019 в 07:42

Довольно легкий выполнить с xargs и удар nohup и & команды. Точная команда - это:

xargs bash -c 'nohup firefox $@ &' null  < tabs.txt 

С тестовым файлом как это:

$ cat tabs.txt                                         
google.com
askubuntu.com
unix.stackexchange.com

enter image description here

Путем это работает, просто:

  • перенаправление tabs.txt файл как входной поток к xargs.
  • xargs будет рассматривать все объекты, входящие как аргументы, и передавать их на bash -c '' команда. null строка используется только для установки аргумента $0. Это могло буквально быть любой строкой и не релевантно.
  • bash будет работать nohup firefox $@ & , при замене всеми аргументами вместо $@. Конечный результат состоит в том, что мы добираемся, чтобы открыть Firefox и отрицать его от bashпроцесс через nohup и &
3
ответ дан 23 November 2019 в 07:42

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

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