it-swarm.com.de

Lesen Sie eine URL aus einer Datei und öffnen Sie sie in einem Firefox-Tab

PreTabs.txt ist eine Datei, die ich auf meinem Desktop habe und die nur die Zeile enthält

google.com

Ich möchte den Inhalt dieser Datei in Firefox leiten, damit die URL in einem neuen Tab geöffnet wird.

Wenn Sie cat PreTabs.txt | firefox ausführen,
sollte das nicht dasselbe sein wie firefox [Contents of PreTabs.txt]?

6
MibMoot

Piping ist nicht dasselbe wie das Übergeben eines Arguments an ein Programm.

Wenn Sie ein Programm ausführen, wird ein Prozess erstellt. Ich vereinfache hier, aber im Grunde hat jeder Prozess einen Standard-In und einen Standard-Out. Es empfängt Eingaben über den Standardeingang (möglicherweise) und gibt Ausgaben über den Standardausgang (möglicherweise) aus. Dies sind die Abkürzungen stdin und stdout.

Wenn Sie ein Programm im Terminal ausführen, ist es der Standard, den Sie während der Ausführung in das Terminal eingeben. Der Standardausgang ist auf dem Terminal aufgedruckt.

Was Sie tun, wenn Sie a | b ausführen, ist, sowohl a als auch b auszuführen, aber die Standardausgabe von a mit der Standardausgabe von b zu verbinden. Das heißt, wenn der Prozess von a eine Ausgabe erstellt hat, wird diese als Eingabe in den Prozess von b eingespeist, genau wie wenn Sie sowohl a als auch b in separaten Terminals ausführen und alles eingeben Der Prozess von a druckt auf seinem Terminal in das Terminal, auf dem Sie b ausführen. Naja fast. Sie können beispielsweise nur Text schreiben, während Prozesse beliebige Daten an einen anderen Prozess weiterleiten können.

Sie können dies testen, indem Sie Daten an tee weiterleiten.

Beispiel:

echo foo | tee

echo liest die Argumente und schreibt sie in die Standardausgabe. Die Standardausgabe ist mit der Standardausgabe von tee verbunden. Tee liest einfach zeilenweise von der Standardeingabe und schreibt die Eingabe in die Standardausgabe. Dies bedeutet, dass "foo" auf Ihr Terminal gedruckt wird, da dies die Standardeinstellung für den Prozess von tee ist.

echo foo | tee | tee | tee

Hat natürlich den gleichen Effekt.

Sie können weitere nützliche Dinge tun, die auch ziemlich einfach sind:

echo foo | sha256sum

Dadurch wird die sha256-Summe von "foo\n" berechnet und gedruckt. Wobei \n ein Zeilenvorschub ist, weil echo seine Ausgabe in einem Zeilenvorschub beendet, sonst hätte das vorherige Beispiel nicht funktioniert, weil tee dies nicht getan hätte habe einen Zeilenvorschub gesehen.

Ihr Befehl cat PreTabs.txt | firefox führt also cat mit dem Argument PreTabs.txt aus, wodurch cat den Inhalt in sein Standard-Out schreibt. Dieses stdout ist das stdin von firefox, was bedeutet, dass firefox es lesen kann. Es muss nicht und es gibt keine Regel, wie es sich dabei verhalten soll. Es sieht so aus, als würde es entweder nicht gelesen oder gelesen und dann ignoriert.

Wenn Sie einem Programm ein Argument übergeben möchten, dieses Argument sich jedoch in einer Textdatei befindet, können Sie Backticks verwenden. Befehle zwischen gepaarten Backticks werden im Voraus ausgeführt und ihre Ausgabe wird an diesem Punkt im äußeren Befehl eingefügt.

Beispiel:

echo bar > foo
echo `cat foo` > foobar

Die erste Zeile schreibt "bar" in die Datei foo (überschreibt den Inhalt der Datei, wenn er bereits vorhanden ist, andernfalls wird eine neue Datei erstellt). In der zweiten Zeile wird zuerst cat foo ausgeführt. Es liest seinen Parameter foo und erfährt, dass es den Inhalt von foo lesen und auf seine Standardausgabe drucken soll. Dieses stdout wird dann wo eingefügt

`cat foo`

befindet sich in der zweiten Zeile, so wird die zweite Zeile

echo foo > foobar

das schreibt foo in die Datei foobar.

Dies bewirkt, dass Firefox etwas unternimmt:

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

öffnet einen neuen Tab, der geladen wird http://stackexchange.com in Firefox.

Sie sagten, dass in Ihrem Fall die Datei geladen wird, deren Name sie als Parameter erhalten hat, und ich habe tatsächlich eine vage Erinnerung daran, dass sie sich in der Vergangenheit so verhalten hat. Es ist wahrscheinlich eine bessere Idee, explizit anzugeben, was zu tun ist:

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

Dies ist in der Manpage (man firefox) definiert als:

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

obwohl es natürlich für Ihre Firefox-Version anders sein könnte.

4
UTF-8

Ziemlich einfach mit den Befehlen xargs und bash Nohup und & auszuführen. Der genaue Befehl lautet:

xargs bash -c 'Nohup firefox [email protected] &' null  < tabs.txt 

Mit einer Testdatei wie dieser:

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

enter image description here

Das funktioniert ganz einfach:

  • leiten Sie die Datei tabs.txt als Eingabestream an xargs um.
  • xargs behandelt alle eingegangenen Elemente als Argumente und leitet sie an den Befehl bash -c '' weiter. Die Zeichenfolge null wird nur zum Festlegen des Arguments $0 verwendet. Es könnte buchstäblich eine beliebige Zeichenfolge sein und ist nicht relevant.
  • bash führt Nohup firefox [email protected] & aus und ersetzt [email protected] durch alle Argumente. Das Endergebnis ist, dass wir Firefox öffnen und es über bash und & aus dem Prozess von Nohup verbannen können.
3