Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16

Thema: mit Bash auf reguläre Datei prüfen bei Drag n Drop

  1. #1
    Registrierter Benutzer
    Registriert seit
    Feb 2017
    Beiträge
    19

    mit Bash auf reguläre Datei prüfen bei Drag n Drop

    Hallo,

    ich möchte unter Linux Mint 18- , xfce/Cinnamon ein Bash-Skript über Drag n Drop ausführen und darin testen, ob das übergebene Objekt eine reguläre Datei ist.

    Das habe ich so probiert:
    Code:
    echo $1
    if [ -f $1 ]; then echo "-f"; fi
    [ -f $1] && echo "-f"

    Wenn ich die Dateien im Terminal mit

    Code:
    ./skript.sh /home/Testdatei
    aufrufe, funktioniert das und das Skript zeigt mir für $1 auch "/home/Testdatei" an.

    Wenn ich die Datei aber mit Drag n Drop auf den Starter für das Skript ziehe, dann funktioniert es nicht. Das übergebene Objekt wird als "file:///home/Testdatei" angezeigt.

    Wie bekomme ich die Erweiterung "file://" weg, oder besser, wie bekomme ich bash dazu, die Elemente auch mit dieser Erweiterung wie gewohnt zu verarbeiten? Ich könnte mir vorstellen, dass diese Erweiterungen bei Netzwerkobjekten notwendig sind und es von Vorteil wäre, wenn das Skript diese verarbeiten könnte.

  2. #2
    Besen-Wesen Avatar von Ginsengelf
    Registriert seit
    Feb 2003
    Ort
    Mars
    Beiträge
    589
    Moin, abhacken kann man das Protokoll z.B. so:
    Code:
    STRING="file:///home/test"
    FOO=${STRING#"file://"}
    echo $FOO
    Ginsengelf
    God's in his heaven. All's right with the world.
    System: Ryzen 7 auf MSI MAG B550 Tomahawk, AMD Vega, 16 GB RAM, openSUSE Tumbleweed

  3. #3
    Registrierter Benutzer
    Registriert seit
    Feb 2017
    Beiträge
    19
    Ich vermute, dass das Skript damit laufen würde. Vielen Dank.
    Ist das Abhacken die übliche Vorgehensweise? Ich stümper mir nur ab und zu für den Eigenbedarf was zusammen und habe daher wenig Erfahrung. Ich bin doch sicher nicht der Erste, der mit diesem "Problem" zu kämpfen hat.

  4. #4
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.810
    Du bist an einer Stelle, wo die Shell ihr "Limit" erreicht. Klar kannst du mehr Aufwand reinpacken, mit einer anderen Sprache ist man aber oft besser bedient. In deinem Fall könnte man zB Python nehmen und prüfen, ob der String für ein URL bzw URI Objekt verwendet werden kann - https://docs.python.org/3/library/urllib.parse.html
    Das Thema ist aber auch nicht so einfach/universell zu beantworten, man findet schnell Punkte die kontrovers betrachtet werden können - zB https://unix.stackexchange.com/quest...ote-filesystem

    Es gilt aber auch, dass man die Lösung nicht ohne Grund komplizierter als nötig machen sollte, von daher würde ich es so lassen, bis du was anderes davon (ftp, http usw) brauchst.
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  5. #5
    Registrierter Benutzer
    Registriert seit
    Feb 2017
    Beiträge
    19
    Dass ich an der Stelle schon das Limit von Bash erreiche, überrascht mich, denn nachdem, was ich so gelesen habe, soll Bash im Vergleich zu Dash wesentlich mächtiger sein. Andererseits ist es aber auch wie ein Dejavue, denn unter Windows (ich sammle erst seit 3 Jahren halbwegs ernsthaft Erfahrung mit Linux) bin ich auch immer wieder an Stellen an Grenzen gestoßen, bei denen ich es nicht erwartet hätte.
    Ich meine es nicht abwertend, aber kann es sein, dass unter Linux weiterhin GUIs und Desktops nicht so gut eingebunden sind wie bei Windows? Also zumindest bzgl. Drag und Drop ist es deutlich leichter Batches unter Windows zu erstellen und zu verarbeiten. Man muss dort keinen Starter erstellen, sondern kann Elemente einfach auf die Batchdateien ziehen, die in irgendwelchen Ordnern liegen, und die Elemente werden so übergeben, dass sie einfach verarbeitet werden können.

    Bei meinem aktuellen Skript werde das Protokoll einfach abhacken und hoffentlich auch das nächste Mal dran denken :-)

    Guten Rutsch!

  6. #6
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.046
    Ggf. wäre es auch sinnvoll mal in die Richtung zu suchen, ob man XFCE an der Stelle klar machen kann, daß es nur den absoluten Pfad ohne eine Klassifizierung übergeben soll.
    Ich bin root - ich darf das.

  7. #7
    Registrierter Benutzer
    Registriert seit
    Feb 2017
    Beiträge
    19
    Ich habe es gerade unter Cinnamon probiert und dort wird tatsächlich kein Zusatz übergeben.
    So etwas innerhalb des Skripts abzufangen würde es universeller machen, zumal ich meistens XFCE nutze, aber auch Cinnamon und vielleicht auch mal auf einen anderen Desktop/Distro ausweichen werde.
    Ich habe mal gegoogelt, aber keinen Hinweis gefunden, wie man xfce die Zusätze bei der Übergabe abgewöhnt.

  8. #8
    Registrierter Benutzer Avatar von sea
    Registriert seit
    May 2020
    Ort
    Bourne in a ($Hell)
    Beiträge
    18
    Klar ist es einfacher in der Windows shell solche sachen zu machen, weil dafür kannst du in der Windows shell andere sachen nicht machen - was dafür bei GNU+Linux absolut selbstverständlich und super easy ist.
    Der springende punkt ist, wofür wurde die shell gemacht.

    Nochwas, Shell-Scripte sind keine Programme.
    BASH ist besonders deswegen zu bevorzugen (meine Meinung) weil es überall verfügbar ist, und damit um einiges portabler als zum Beispiel ZSH oder DASH.

    Scripte sind super um repetive aufgaben, idealerweise 1-10 zeilen, zu erstellen welche meistens nur sporadisch und dazu noch im hintergrund laufen.
    Man kann auch mal einen kleinen Wizzard schreiben um ein paar "Eck-Daten" für das script zu sammeln, dann sind es natürlich mehr als 10 Zeilen.
    Aber spätestens wenn man ein Script mit 1000 Zeilen hat, hätte man wohl besser zu einer Programmiersprache wie C#, Python oder Perl gegriffen.
    Alleine aus Performance gründen wäre dies zu empfehlen.

    Die Zusatz angabe "file://" kriegt man meistens im Zusammenhang mit Web-Browsers, aber ja, auch Datei-Browser können dies heutzutage 'anbringen'.
    Ich weiss jetzt nicht wie XFCE unter der haube funktioniert, aber ich könnte mir vorstellen das xdg-open das eh schon handhaben kann und sich nicht um den "Zusatz" "file://" 'kümmert'.

    Code:
    xdg-open file:///home/test/file.sh
    Sorry das musste raus, hoffe das hilft

  9. #9
    Registrierter Benutzer Avatar von drcux
    Registriert seit
    Oct 2003
    Beiträge
    6.989
    Zitat Zitat von sea Beitrag anzeigen
    Nochwas, Shell-Scripte sind keine Programme.
    Das ist aber wohl deine persönliche Meinung...

  10. #10
    Registrierter Benutzer Avatar von sea
    Registriert seit
    May 2020
    Ort
    Bourne in a ($Hell)
    Beiträge
    18
    Zitat Zitat von drcux Beitrag anzeigen
    Das ist aber wohl deine persönliche Meinung...
    Nicht direkt...

    Zum einen sind Scripte interpreter und keine binaries.
    Desweiteren nutzt man Scripte um Aufgaben (meistens) mit binaries zu vereinfachen (Stapelverarbeitung wird das unter Windwos genannt).

    Klar, ist ein Script schreiben auch programmieren, dennoch hat man weniger möglichkeiten als wenn man z.B. C{#,++} verwenden würde.

    Aber im Grund ist es ganz einfach.
    • Hast du schon einmal die terminologie "application-like script" gehört?
    • Wie wird die Sprache genannt mit der Dateien in einer bestimmten Shell ausgeführt werden -> Skriptsprache oder Programmiersprache?


    Erläuterung:
    https://en.wikipedia.org/wiki/Shell_script#Programming
    Hier möchte ich die referenz auf Datentypstrukturen verweisen, bzw auf das fehlen eben dieser.

    Und hier:
    https://de.wikipedia.org/wiki/Programmiersprache
    Der erste Satz verweist genau darauf das Programme eben Zugriff auf besagt Datentypstrukturen haben.
    (Wie im Wiki aufgeführt, zählen Arrays noch nicht dazu)

    Folglich:
    Code:
    [ Sprache hat Datentypstrukturen ] && \
        ist_Programm=wahr || \
        ist_Programm=falsch
    Demnach ist die pauschal Aussage das Skripte keine Programme sind: wahr
    (zumindest unter der Berücksichtigung das es keine Regel ohne Ausnahme gibt)

    Ausserdem:


    PS:
    Ich hab ein Text User Interface Framework in und für BASH geschrieben, genannt Shell Wrapper and Runtime Modifier (SWARM).
    Ich würde das kein Programm, bzw, keine Applikation nennen, aber damit kannst du ganz leicht application-like scripte machen

    Damit sollte klar sein das ich scripten liebe, dennoch muss ich anerkennen das Scripte nicht ganz so 'mächtig' sind wie Programme.

    Hoffe das hilft
    Geändert von sea (08.02.21 um 11:32 Uhr)

  11. #11
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.810
    hmm heute wird aber unfassbar viel damit erledigt, so Kleinigkeiten, wie das Internet sind ohne Skriptsprachen nicht mehr denkbar. Mach dich frei von solchen Vorurteilen, Skripte sind gleichwertig, werden ja auch die gleichen Dinge angewand, man programmiert eben.
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  12. #12
    Registrierter Benutzer Avatar von sea
    Registriert seit
    May 2020
    Ort
    Bourne in a ($Hell)
    Beiträge
    18
    Zitat Zitat von nopes Beitrag anzeigen
    hmm heute wird aber unfassbar viel damit erledigt, so Kleinigkeiten, wie das Internet sind ohne Skriptsprachen nicht mehr denkbar. Mach dich frei von solchen Vorurteilen, Skripte sind gleichwertig, werden ja auch die gleichen Dinge angewand, man programmiert eben.
    Das habe ich nicht gesagt.


    Nochmal:

    Zitat Zitat von sea Beitrag anzeigen
    .....
    Desweiteren nutzt man Scripte um Aufgaben (meistens) mit binaries zu vereinfachen (Stapelverarbeitung wird das unter Windwos genannt).

    Klar, ist ein Script schreiben auch programmieren, dennoch hat man weniger möglichkeiten als wenn man z.B. C{#,++} verwenden würde.
    ....
    • Hast du schon einmal die terminologie "application-like script" gehört?
    • Wie wird die Sprache genannt mit der Dateien in einer bestimmten Shell ausgeführt werden -> Skriptsprache oder Programmiersprache?

    ....
    Damit sollte klar sein das ich scripten liebe, dennoch muss ich anerkennen das Scripte nicht ganz so 'mächtig' sind wie Programme.
    ....
    Aber schön...
    Ich musste mir 5 Jahre lang regelmässig (auf versch. anderen foren) "anhören" das meine skripte keine 'little apps' seien, aus eben oben genannten gründen.

    Ich hab mit KEINEM Wort gesagt scripte seien minderwertig oder nutzlos (es klingt so als ob du mich auf diese Weise verstanden/interpretiert hast ; und deswegen erwähnte ich SWARM, was du im gegenzug gekonnt igonriert hast).
    Lediglich das Skripte (per definition, siehe Wiki) keine Programme sind, die tätigkeit an sich ist: Programmieren, daran rüttelt auch keiner.

    EDIT:
    Ich will mir keine 'Aussagen' (Bedeutungen) unterstellen lassen die ich nicht gemacht/gemeint habe. Aber auch nicht den thread hijjjacken... lass uns einig werden das wir uns nicht einig sind.
    Geändert von sea (08.02.21 um 13:01 Uhr)

  13. #13
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.046
    Zitat Zitat von sea Beitrag anzeigen
    Lediglich das Skripte (per definition, siehe Wiki) keine Programme sind.
    https://de.wikipedia.org/wiki/Computerprogramm sieht das anders.

    ... der Rest ist leider reines Wording.

    Shell-Script
    Perl-Script
    PHP-Script
    C-Programm
    NodeJS-Script
    ...
    Ich bin root - ich darf das.

  14. #14
    Registrierter Benutzer Avatar von drcux
    Registriert seit
    Oct 2003
    Beiträge
    6.989
    In deinem von dir verlinktem Artikel "Scripting_Languages" heißt es: "with the term "script" often used for small programs (up to a few thousand lines of code) in such languages", also doch Programme.

    Außerdem unterscheidet man nicht zwischen Programmiersprache und Skriptsprache, sondern die Programmiersprachen werden in die Gruppen der Hochsprachen (Compiler) und Skriptsprachen (Interpreter) unterteilt. Wobei das heute alles recht fließend geworden ist, gibt ja auch Compiler für eigentlich Interpretersprachen und Python ist da auch so nen Mischwesen....

  15. #15
    Registrierter Benutzer Avatar von sea
    Registriert seit
    May 2020
    Ort
    Bourne in a ($Hell)
    Beiträge
    18
    Zitat Zitat von marce Beitrag anzeigen
    Scroll bitte mal ein bisschen runter zu den Klassifizierungen (1. Punkt nach der Übersicht), da steht die Unterscheidung zu Stapelprogrammen innerhalb der 'Sammelgruppe' Software.

    Bei Scripten ist das Programm die Shell, welche benötigt wird um das Script zu interpretieren, nicht die Skriptdatei.
    Im Grunde genommen sage ich doch nur aus das es einen Unterschied gibt zwischen einem C-Shell-Script und einem C-Program.

    Oder wollt ihr mir sagen das ihr damit die absolut selben sachen machen könnt (Da ja beides 'C' ist)?
    Nicht?
    Also gibt es einen Unterschied, das ist mein Punkt.

    Nicht mehr, nicht weniger.

    Zitat Zitat von marce Beitrag anzeigen
    ...
    Shell-Script
    Perl-Script
    PHP-Script
    C-Programm
    NodeJS-Script
    ...
    NodeJS-Script ist redundant.. NodeJavaScript-Script (ich weiss das ist der Sprach-gebrauch; ich will nur darauf aufmerksam machen)....
    (Sinngemäs: JavaScript != Java ;; VBS != VB ; CSH != C :: Bei all diesen Sachen hast du die explizite Deklaration (im Namen, bzw der Dateiendung selbst) das es kein Program ist, sondern ein Script ist, also 'sagen' die 'Hersteller' der Sprache selbst, das es nicht dasselbe ist, sondern nur verwandt - in diesen fällen zumindest.)

    Ich sag doch nur das Rot != Blau...
    Das hat weder mit Vorurteil noch mit irgendeiner 'Wertung' zu tun.

    Wie gesagt, mein Vorschlag wäre das wir uns einigen nicht einig zu sein.

    Back to topic:
    Ich möchte davon abraten in /home dateien zu erstellen.. wenn, dann in $HOME...

    Wie wäre es hiermit?
    Code:
    STRING="${1:-file:///home/test}"
    
    if echo "$STRING" | grep -q -i "tp://"
    then
    	echo "$STRING" ist eine URL"
    else
    	tmp="${STRING/*:\/\/}"
    	if [[ -f "$tmp" ]]
    	then	echo "argument is a file: $tmp"
    	elif [[ -d "$tmp" ]]
    	then	echo "argument is a dir: $tmp"
    	else	echo "Error"
    	fi
    fi
    (Ich hab hier mal Gopher, Arpa und Steam aussen vor gelassen )


    Hoffe das hilft
    Geändert von sea (08.02.21 um 15:15 Uhr)

Ähnliche Themen

  1. TS2 -> Drag&drop
    Von der_angler im Forum Linux Allgemein
    Antworten: 8
    Letzter Beitrag: 22.12.05, 13:07
  2. drag&drop mit xfce4
    Von monkman im Forum Windowmanager
    Antworten: 0
    Letzter Beitrag: 28.01.04, 11:58
  3. Wer benutzt drag'n'drop?
    Von Samsara im Forum Windowmanager
    Antworten: 15
    Letzter Beitrag: 24.08.03, 20:42
  4. drag&drop in KDE
    Von kinkerlitzchen im Forum Windowmanager
    Antworten: 19
    Letzter Beitrag: 22.06.03, 16:42
  5. Verknüfpungen auf Desktop per Drag & Drop ? KDE 1.1
    Von AlienSearcher im Forum Windowmanager
    Antworten: 2
    Letzter Beitrag: 23.03.03, 21:24

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •