PreTabs.txt
файл, который я имею на своем рабочем столе, и он просто содержит строку
google.com
Я хочу передать содержание по каналу того файла в Firefox так, чтобы это открыло URL на новой вкладке.
Если Вы выполняетесь cat PreTabs.txt | firefox
,
не был должен это совпасть с firefox [Contents of PreTabs.txt]
?
Передача по каналу не является тем же как передачей аргумента программе.
Если Вы запускаете программу, процесс создается. Я упрощаю здесь, но в основном каждый процесс имеет стандарт в и стандарт. Это получает вход через стандарт в (возможно), и производит вывод в его стандарте (возможно). Они сокращены stdin и stdout соответственно.
Когда Вы выполняете программу в терминале, его стандарт в - то, что Вы вводите в терминал в то время как его выполнение. Его стандарт печатается на терминале.
Что Вы делаете, когда Вы выполняетесь a | b
должен выполнить обоих a
и b
но соедините stdout a
обработайте к stdin b
процесс. Таким образом, если a
обработайте созданный вывод, он питается, как введено к b
процесс, точно так же, как, если необходимо было выполнить обоих a
и b
в отдельных терминалах и типе все a
обработайте печать на его терминале в терминал, который Вы выполняете b
на. Ну, почти. Можно только сделать текст, например, тогда как процессы могут передать произвольные данные по каналу к другому процессу.
Можно протестировать это путем передачи по каналу данных к tee
.
Пример:
echo foo | tee
echo
читает его аргументы и пишет им в его stdout. Его stdout подключен с tee
stdin. Мишень просто читает из своего 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, конечно.
Довольно легкий выполнить с xargs
и удар nohup
и &
команды. Точная команда - это:
xargs bash -c 'nohup firefox $@ &' null < tabs.txt
С тестовым файлом как это:
$ cat tabs.txt
google.com
askubuntu.com
unix.stackexchange.com
Путем это работает, просто:
tabs.txt
файл как входной поток к xargs
. xargs
будет рассматривать все объекты, входящие как аргументы, и передавать их на bash -c ''
команда. null
строка используется только для установки аргумента $0
. Это могло буквально быть любой строкой и не релевантно.bash
будет работать nohup firefox $@ &
, при замене всеми аргументами вместо $@
. Конечный результат состоит в том, что мы добираемся, чтобы открыть Firefox и отрицать его от bash
процесс через nohup
и &