dersven
Anmeldungsdatum: 16. August 2005
Beiträge: 792
Wohnort: Kreuzlingen, Schweiz
|
HI! Ich bin leider noch nicht wirklich fit im "shell-scripten",... Im Prinzip möchte ich in meinem Script folgendes machen: programm -p "datei name" bzw.
programm -p datei\ name der Datei-Name wird an mein Script allerdings als Parameter übergeben. Also habe ich im Script geschrieben:
programm -p "$1" das funktioniert aber nur so lange keine Leer-Zeichen im übergebenen Dateinamen vorkommen. (die ersten beiden varianten in der Kommandozeile eingegeben funktionieren problemlos) Ich habe bereits einige andere Varianten ausprobiert, aber scheinbar ist das bei mir ein grundlegendes Problem. Grüße!
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17625
Wohnort: Berlin
|
Der Dateiname muß an Dein Script schon als eine Zeichenkette übergeben werden. Zeichenketten werden üblicherweise durch Whitespace voneinander getrennt. Wenn man Dein Script mit foo "file name" aufruft, dann ist "file name"=$1 Ruft man es mit
foo file name auf ist $1=foo und $2=name Natürlich kannst Du intern schreiben: filename="$1 $2" um einen Dateinamen mit Blank zu bilden. Das Skript blank name.sh
#!/bin/bash
filename="$1 $2"
cat "$filename"
kannst Du also mit
sh "blank name.sh" blank name.sh aufrufen - eine ziemlich sinnlose Sache wie ich meine, da man ja wissen muß, daß unmaskierte Blanks eintrudeln, und das es wirklich Blanks sind, und nicht Tabs, und auch nur eins jeweils.
Commandcompletition funktioniert auch nicht mehr.
|
dersven
(Themenstarter)
Anmeldungsdatum: 16. August 2005
Beiträge: 792
Wohnort: Kreuzlingen, Schweiz
|
Ich lasse das ganze als nautilus-Script laufen,... Das merkwürdige ist ja, dass ich einem meine Java-Programme Problemlos einen Dateinamen mit Leerzeichen übergeben kann, und das Programm die Datei ordentlich verarbeiten kann ($VERZEICHNIS enthält einen Pfad). java HauptProgramm "$VERZEICHNIS/$1" Nur bei dem anderen Programm geht es nicht. ich dachte erst, dass das Programm selbst den Dateinamen nicht verarbeiten kann. Als ich aber die beiden obenen erst-genannten zeilen testweise in die Kommandozeile eingegeben habe, hat es geklappt. Ich habe dann auch versucht die Anführungszeichen an die Kommandozeileie zu übergeben und in meinem Skript folgendes geschrieben:
programm -p \"$1\" Hat auch nicht geklappt. Deswegen auch die Vermutung, dass es ein Verständnis-Problem bei mir gibt... Grüße!
|
DaWi
Anmeldungsdatum: 19. Februar 2008
Beiträge: Zähle...
|
Wenn du das als nautilusskript laufen lässt, kannst du ja nichts übergeben. Da bekommst du ja die infos per spezieller Variablen "NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" und solch zeuchs Nautilusskripte Was genau planst du eigentlich? Wenn du vielleicht erklärst was du übergibtst und wo das herkommt, kann man dir vielleicht besser helfen.... Grüße DaWi ps: Hast du schonmal "\" ...\" " versucht?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17625
Wohnort: Berlin
|
dersven hat geschrieben: Nur bei dem anderen Programm geht es nicht.
Welchem Programm? dersven hat geschrieben: ich dachte erst, dass das Programm selbst den Dateinamen nicht verarbeiten kann. Als ich aber die beiden oben erstgenannten Zeilen testweise in die Kommandozeile eingegeben habe, hat es geklappt.
Weil das ja auch richtig ist, so. dersven hat geschrieben: Ich habe dann auch versucht die Anführungszeichen an die Kommandozeileie zu übergeben und in meinem Skript folgendes geschrieben:
programm -p \"$1\"
Das ist auch Unfug, weil es dem Programm sagt, daß die Anführungsstriche Teil des Dateinamens sind - was ja nicht stimmt. dersven hat geschrieben: Hat auch nicht geklappt. Deswegen auch die Vermutung, dass es ein Verständnis-Problem bei mir gibt...
Wenn das Javaprogramm die Datei gefunden hat ohne Maskierung des Leerzeichens, dann hat es wohl einen ausgeklügelten Mechanismus solche Fehleingaben zu korrigieren.
|
dersven
(Themenstarter)
Anmeldungsdatum: 16. August 2005
Beiträge: 792
Wohnort: Kreuzlingen, Schweiz
|
DaWi hat geschrieben: Was genau planst du eigentlich? Wenn du vielleicht erklärst was du übergibtst und wo das herkommt, kann man dir vielleicht besser helfen....
Ich klicke mit der rechten Maustaste auf eine einzige Datei. Der Name der Datei kann leerzeichen enthalten. dann starte ich über den nautilus-script-manager das Skript. Dieses Skript soll dann den erhaltenen Dateinamen komplett an das Programm, dass in diesem Skript aufgerufen wird, übergeben werden. Das Programm an sich versteht Leerzeichen im Namen (ausprobiert, siehe oben). DaWi hat geschrieben: ps: Hast du schonmal "\" ...\" " versucht?
Jo,... hat aber nicht geklappt DaWi hat geschrieben: Wenn du das als nautilusskript laufen lässt, kannst du ja nichts übergeben. Da bekommst du ja die infos per spezieller Variablen "NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" und solch zeuchs
Ich habe mal eine abgewandelte form probiert von: Nautilus_Skripte
#!/bin/bash
FILES="`echo ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS}`"
for FILE in "${FILES}" ; do
gdialog --title "Report" --msgbox "TEST: ${FILE}"
done
exit 0 Allerdings bekomme ich da nur ein einziges mal eine ausgabe, in der alle Verzeischnis und Dateinamen aneinander gereiht sind! (anstatt bei drei ausgewählten dateien drei info-Boxen!)
Wenn ich $1 ausgebe mit:
gdialog --title "Report" --msgbox "$1" Dann steht sogar der volle Dateiname drin! nur wird der scheinbar nicht korrekt an das Programm übergeben
user unknown hat geschrieben: Das ist auch Unfug, weil es dem Programm sagt, daß die Anführungsstriche Teil des Dateinamens sind - was ja nicht stimmt.
programm -p "/pfad/zur/Datei mit Leerzeichen.endung" funktioniert! genauso wie
programm -p /pfad/zur/Datei\ mit\ Leerzeichen.endung Grüße!
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17625
Wohnort: Berlin
|
dersven hat geschrieben: ... über den nautilus-script-manager...
Öööh! So lese ich Beiträge. Hier: https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/95519 Ein bekannter Bug (seit anno dunnemals 2007-03-24 bekannt). Und gemeldet von wem? So lese ich Beiträge. ☺
|
dersven
(Themenstarter)
Anmeldungsdatum: 16. August 2005
Beiträge: 792
Wohnort: Kreuzlingen, Schweiz
|
OK, dann knicke ich das man mit der schleife und bleibe bei dem $1. Da steht ja der richtige Dateiname drin.
gdialog --title "Report" --msgbox "$1" Der Pfad ist ja der Aktuelle Pfad in dem das skript ausgeführt wird,... dann sollte es doch klappen mit dem $1,... Welche Möglichkeiten habe ich denn eine Variable "escaped" zu übergeben? ich dachte es geht mit "$1",...
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17625
Wohnort: Berlin
|
Du redest noch von Nautilus-Skript? Ich würde sagen keine Chance. Du kannst Leerstellen in Dateinamen vermeiden - that's it.
|
dersven
(Themenstarter)
Anmeldungsdatum: 16. August 2005
Beiträge: 792
Wohnort: Kreuzlingen, Schweiz
|
user unknown hat geschrieben: Du redest noch von Nautilus-Skript? Ich würde sagen keine Chance. Du kannst Leerstellen in Dateinamen vermeiden - that's it.
Ja, ich rede noch von nautilus-Skript! ich hab jetzt noch versucht:
NUE=`echo "$1" | sed 's/ /\\ /g'`
programm -p $NU jetzt bin ich mit meinen Latein am Ende,...
|
JFG
Anmeldungsdatum: 17. September 2007
Beiträge: 99
|
Ich würde es mal mit $* versuchen. Bemerke, dass das erste Zeichen der Variable IFS ein Leerzeichen sein sollte (was aber standardmäßig der Fall ist). man bash:
Special Parameters
The shell treats several parameters specially. These parameters may
only be referenced; assignment to them is not allowed.
* Expands to the positional parameters, starting from one. When
the expansion occurs within double quotes, it expands to a sin‐
gle word with the value of each parameter separated by the first
character of the IFS special variable. That is, "$*" is equiva‐
lent to "$1c$2c...", where c is the first character of the value
of the IFS variable. If IFS is unset, the parameters are sepa‐
rated by spaces. If IFS is null, the parameters are joined
without intervening separators. Wenn das nicht geht – kannst du nochmal schreiben, was genau in $1 und $2 steht, wie die Datei eigentlich heißen sollte...? Vielleicht auch mal das ganze Script reinstellen, wenn es nicht zu groß ist? Viel Glück
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17625
Wohnort: Berlin
|
JFG hat geschrieben: man bash
Es geht aber nicht um bash, sondern um nautilus-script.
|
dersven
(Themenstarter)
Anmeldungsdatum: 16. August 2005
Beiträge: 792
Wohnort: Kreuzlingen, Schweiz
|
Ich hab quasi das ganze Programm schon gepostet ist lediglich ein zweizeiler, der es mir erspart einen befehl in die Befehlszeile einztuippen. das Programm heist fastacmd und ist im blast2-paket. Die ausgabe des Programms soll in eine neue Datei umgeleitet werden, die den unsprünglichen Namen + eine zusätzliche Endung hat fastacmd -d [...] -i "$1" > "$1.seq"
gdialog --title "Report" --msgbox "Test: $1" Mehr will ich nicht machen,... ich hab das ganze schonmal vpor über einem Jahr versucht gehabt, und bin an der selben Stelle gescheitert. Allerletzte möglichkeit wäre wirklich, dass ich " " durch "_" in meinen Dateinamen ersetze. Aber da fastacmd Leerzeichen prinzipiell im Pfad/Dateinamen akzeptiert, und der korrekte/komplette dateiname in $1 drin steht, sollte es doch anders gehen,... Ich kann ja auch in der Konsole den Befehl schreiben, dabei den Dateinamen mit Leerzeichen auf die Beiden oben genannten weise verwenden, und alles klappt korrekt,.... nur über nautilus-script und die rechte maustatste klappt es nicht,...
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17625
Wohnort: Berlin
|
dersven hat geschrieben: Aber da fastacmd Leerzeichen prinzipiell im Pfad/Dateinamen akzeptiert, und der korrekte/komplette dateiname in $1 drin steht, sollte es doch anders gehen,...
Fastacmd verarztet aber immer nur eine Datei, oder? Wenn nautilus-script Blanks verwendet um Dateinamen zu trennen, dann kann man einfach nicht unterscheiden, ob das mehrere Dateien sind, oder eine mit Blank im Namen (oder mehrere mit Blank im Namen). Du kannst Dich dem Bugreport anschließen und fragen, ob es so schwer ist ein \0 zu verwenden, oder daß nautilus-script die Namen mit "An führungs zeichen" schon maskiert übergibt, oder "per\ Anführungszeichen" maskiert. Oder Du besorgst Dir die Quellen und patchst selbst - hätte ich getan, wenn es in Java geschrieben wäre.
|
JFG
Anmeldungsdatum: 17. September 2007
Beiträge: 99
|
Also ich hab mal kurz geguckt, und dieses Script gefunden: _/76316b2363c9eaaa8931547551873149.plain Da steht folgendes drin:
the_file=$1
[...]
file_name=`basename "$the_file"| sed -e "s/ /\ /g"` # get the filename only and replace " " with "\ " Ich würde es also folgendermaßen versuchen: filename=$1
filename=`echo $filename | sed -e "s/ /\ /g"`
fastacmd -d [...] -i "$filename" > "$filename.seq"
gdialog --title "Report" --msgbox "Test: $filename" Wenn es nur eine Datei ist, die bearbeitet werden soll...
|