Ich habe dieses Skript, das eine .html
Datei öffnet, aber ich möchte es so ändern, dass es die Datei nur öffnet, wenn sie noch nicht geöffnet ist.
Kennt jemand einige Zeilen, die hinzugefügt werden müssen, um dies zu erreichen?
#!/bin/bash
fileFragment=$"*project/html/index.html"
fullPath=$(find ../ -path $fileFragment)
xdg-open $fullPath &
BEARBEITEN
Ich hätte gerne eine allgemeine Lösung, deshalb habe ich die Frage so einfach gehalten. Es geht nicht um Browser, sondern um alle Dateien, die ich mit geöffnet habe.xdg-open
Ich habe es bereits mit diesem Beispiel angegeben und möchte es nicht mehr für bestimmte Browser angeben.
Aber wenn es keine einfache allgemeine Lösung gibt, hätte ich lieber eine Antwort für meinen speziellen Fall als gar keine: In meinem Fall verwende ich also Firefox.
Antwort1
Die folgende Lösung funktioniert nur für Befehle, dielauf weiterbis man das Programm/den Tab schließt. Leider ist das bei den meisten GUI-Programmen nicht der Fall und
xdg-open
. Im Fall von Firefox könnte maneine Liste der aktuell geöffneten URLs abrufenundgrep
es, aber das ist weder eine allgemeine noch eine ideale Lösung. Wie man testet, ob ein Programm läuft, siehediese Frage.
Sie können lockfile
aus demprocmail
Paket. Alsseine man
Seiteenthält ein Beispiel, das genau zu Ihrem Anwendungsfall passt. Ich zitiere es einfach:
Angenommen, Sie möchten sicherstellen, dass der Zugriff auf die Datei „important“ serialisiert ist, d. h., dass nicht mehr als ein Programm oder Shell-Skript darauf zugreifen darf. Der Einfachheit halber nehmen wir an, dass es sich um ein Shell-Skript handelt. In diesem Fall könnten Sie es folgendermaßen lösen:
... lockfile important.lock ... access_"important"_to_your_hearts_content ... rm -f important.lock ...
Wenn nun alle Skripte, die auf „wichtig“ zugreifen, dieser Richtlinie folgen, können Sie sicher sein, dass zwischen den
lockfile
und denrm
Befehlen höchstens ein Skript ausgeführt wird.
Standardmäßig wartet jedes andere Skript, bis die Datei wieder entsperrt wird. Standardmäßig wird alle acht Sekunden getestet (ändern Sie dies beispielsweise lockfile -5 important.lock
mit fünf Sekunden). Wenn Sie nur überprüfen möchten, ob die Datei gesperrt ist, können Sie den klassischen test
Befehl verwenden:
if [ -e important.lock ]; then
# stuff to do if locked
else
# stuff to do if not locked
fi