Öffnen Sie die Datei, falls sie nicht bereits mit dem .sh-Skript geöffnet ist.

Öffnen Sie die Datei, falls sie nicht bereits mit dem .sh-Skript geöffnet ist.

Ich habe dieses Skript, das eine .htmlDatei ö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-openIch 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 abrufenund grepes, aber das ist weder eine allgemeine noch eine ideale Lösung. Wie man testet, ob ein Programm läuft, siehediese Frage.


Sie können lockfileaus demprocmailPaketInstallieren Sie procmail. Alsseine manSeiteenthä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 lockfileund den rmBefehlen 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.lockmit fünf Sekunden). Wenn Sie nur überprüfen möchten, ob die Datei gesperrt ist, können Sie den klassischen testBefehl verwenden:

if [ -e important.lock ]; then
  # stuff to do if locked
else
  # stuff to do if not locked
fi

verwandte Informationen