• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] Quotierte Argumente an Befehl durchreichen

OsunSeyi

Hacker
Hi!

Habe folgendes Problem...

Die Syntax für 'xte' aus dem Paket 'xautomation' benutzt diese Syntax:
Code:
xte 'keydown Shift_L' 'key greater' 'keyup Shift_L'

Also müssen die drei Argumente quotiert sein, weil sie ja Leerzeichen enthalten.
Generiere ich die Argumente in einem Script, bekomme ich diese Situation:

Code:
Code im Script:

echo `echo xte "$argumente"`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Ausgabe im Terminal:

xte 'keydown Shift_L' 'key greater' 'keyup Shift_L'

Also soweit super, wird mit copy&paste im Terminal auch ausgeführt, aber es soll ja direkt ausgeführt werden:

Code:
Code im Script:

`echo xte "$argumente"`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Ausgabe im Terminal:

Unknown command ''keydown'
Unknown command 'Shift_L''
Unknown command ''key'
Unknown command 'greater''
Unknown command ''keyup'
Unknown command 'Shift_L''

Klar, weil jetzt die Singlequotes zwar noch vorhanden sind, aber die Leerzeichen in den drei Argumenten dazu führen, das hieraus ebenfalls einzelne Argumente werden, mit denen 'xte' so natürlich nichts anfangen kann.

Oder aber direkt:

Code:
Code im Script:

xte "$argumente"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Ausgabe im Terminal:

Unknown command ' 'keydown Shift_L' 'key greater' 'keyup Shift_L''

Ich habe bisher nicht heraus gefunden, wie ich das Problem lösen kann...

mit vielen Grüßen!
tom

Hab's mal mit 'ner Schleife probiert à la
Code:
xte `for ARG in $ARGS ; do echo $ARG | sed... usw`
Nee mitnichten...
 

framp

Moderator
Teammitglied
Sorry - aber irgendwie verstehe ich nicht was der Inhalt von $argumente ist und wie der da reinkommt.

Hast Du nicht mal ein kleines Beispielscript (vollstaendig) und den Konsolaufruf so dass Dein Problem lokal reproduzierbar ist?
 
OP
OsunSeyi

OsunSeyi

Hacker
framp schrieb:
Gräfin Klara schrieb:
Du mußt das in ein array schreiben
Jupp. Wenn der TE den Code zeigt koennte man sogar eine Codeloesung praesentieren. Aber vielleicht hilft ja auch https://www.linux-tips-and-tricks.d...lbst-ohne-verlust-von-parametern-weitergeben/ schon.

@framp: Danke, das ist eine coole Seite die ich noch nicht kannte und mir mal in die Bookmarks packen werde!

@Gräfin Klara:

Habe das mal probiert:

Code:
ARRAY=()
    N=0

 ARGS=`echo $* | sed "s|$1 $2||g"`

	for ARG in $ARGS ; do

		ARRAY[$N]=`echo $ARG				|\
									 	\
		sed "s|DOWN_\([A-Za-z_]\+\)|'keydown \1'|g"	|\
		sed "s|CLICK_\([A-Za-z_]\+\)|'key \1'|g"		|\
		sed "s|UP_\([A-Za-z_]\+\)|'keyup \1'|g"`

		N=$(( $N+1 ))
	done

	echo ${ARRAY[0]}
	echo ${ARRAY[1]}
	echo ${ARRAY[2]}

	xte "${ARRAY[@]}"

Code:
~ WIN rox xte DOWN_Shift_L CLICK_greater UP_Shift_L
'keydown Shift_L'
'key greater'
'keyup Shift_L'
Unknown command ''keydown Shift_L''
Unknown command ''key greater''
Unknown command ''keyup Shift_L''

Ohne jetzt auf den Stil und den Aufruf abzuheben ist aber, daß das Array zwar korrekt funktioniert, der Aufruf selber aber trotzdem nicht klappt...

:???:

'WIN' ist ein Script, was feststellt, welches Programm das Fenster mit dem aktuellen Fokus nutzt,
der Aufruf selber kommt letztlich aus Xbindkeys, und da ich eh rumscripten muss um den Aufruf zu starten (um die einfachen Quotes hineinzubekommen), dachte ich mir, ich könnte für 'xte' auch eine vereinfachte Syntax benutzen...

Aber vielleicht den Tip von Manul mit der korrekten Syntax probieren?
Ich meine aber, es wird doch korrekt als Array mit drei Elementen gewertet, wo ist das Problem??
 
Leider verstehe ich weder dein script, noch was du vorhast.... egal

Nehmen wir an, dass xte in einem script folgend aufgerufen werden soll:
Code:
# xte "keydown Shift_L" "key greater" "keyup Shift_L"

dann könnte dieses script mit dem Namen "test.sh" so aussehen:
Code:
#!/bin/bash

ARR=()

for ARG in "$@"; do
	ARR+=("$ARG")
done

xte "${ARR[@]}"
exit 0

und der Aufruf des scripts test.sh wäre dann:
Code:
# test.sh "keydown Shift_L" "key greater" "keyup Shift_L"
Vielleicht hilft das dein Problem zu lösen.

Deine Bedenken rund um die "einfachen Quotes" sind nicht zielführend, das funktioniert anders als du glaubst.

Gruß
Gräfin Klara
 
OP
OsunSeyi

OsunSeyi

Hacker
Hab das Problem gefunden...

Aber ganz kurz zum Sinn der Sache:

Habe angefangen mit Emacs Org-Mode und kann mich einfach nicht an die Tastenkombinationen gewöhnen. Bin auch kein Vim-User sondern benutze normalerweise Scite.
Also ganz "normal" '^X' '^C' '^V' usw...

Es ist mir schon recht die Emacs Tastenkombis zu lernen, aber es passiert einfach zu oft, daß ich versehentlich irgendwas falsches Tippe und dann nicht ad hoc wieder zurück komme, also Emacs schließe und wieder neu öffne um weiterzumachen. Das Ganze funktioniert entweder im Schneckentempo und klappt oder normal und klappt eben nicht.

Nun hab ich ja nicht vor, deswegen die Tastenkürzel bei Emacs zu ändern. Aber ich dachte mir, es wäre sinnvoll, mittels 'Xbindkeys' einfach die Emacs-Kürzel zu überschreiben, also die bei Emacs üblichen Kürzel mittels den mir gebräuchlichen Keys aufzurufen.

Dazu wäre es nun aber wieder ganz chick, in Xbindkeys Shortcuts definieren zu können, die sich tatsächlich nur auf bestimmte Fenster beziehen.

Dazu dient das Script 'window-active-keys', das der Einfachheit halber über den Link 'WIN' aufgerufen wird, dieses also in der 'xbindkeysrc' in der Form 'WIN programm keykombi'.

Das Script schaut mittels 'xprop' und 'ps', welches Programm das gerade aktive Fenster benutzt, und nur dann wenn es sich um das gewünschte handelt, werden die Keys gemappt.

Ich habe allerdings meine Zweilel, ob das wirklich gut klappt. Xbindkeys wird zunächst ja bei Verwendung der gewünschten 'neuen' Kombi zunächst 'WIN' aufrufen, auch wenn ich zB wieder in Scite schreibe... man kann es natürlich auch killen, und alles ist beim Alten bzw anschmeißen, wenn man in Emacs ist.

Jedenfalls (und das war der Fehler) ist es nicht einfach möglich ein neues Tastenkürzel mit 'xte' in der 'xbindkeysrc' aufzurufen. Wenn ein 'sleep 0.1' dazwischengeschaltet ist, klappt die Sache, und sonst tut sich nichts. Darum konnte ich hier auch lange meinen, es läge am Script!

Mit 'sleep 0.1' vor dem 'xte'-Aufruf klappt es jetzt endlich vor allem Dank dem letzten Tip von Gräfin Clara (vielen Dank!) aber ob das Ganze zuletzt wirklich geil ist, weiß ich noch nicht.

vielen Dank und einen schönen Abend,
Tom
 
OP
OsunSeyi

OsunSeyi

Hacker
Gräfin Klara schrieb:
Deine Bedenken rund um die "einfachen Quotes" sind nicht zielführend, das funktioniert anders als du glaubst.

:???:

Recht hast Du...
Habe das mal exemplarisch versucht aufzudröseln:

SCRIPT_1

Code:
 ARR=()
 STRING='arg_1 arg_2'

 for ARG in $STRING; do

		ARR+='"'`echo $ARG | tr '_' ' '`'" '
 done

	SCRIPT_2 "${ARR[@]}"
	echo "${ARR[@]}"

~~~~~~~~~~~~~~~~~~~~~~~
AUSGABE:

"arg 1" "arg 2"

SCRIPT_2

Code:
 echo ':'$1
 echo ':'$2

~~~~~~~~~~~~~~~~~~~~~~~
AUSGABE:

:"arg 1" "arg 2"
:

Mir ist nicht klar geworden, wie ich die Argumente (welche Leerzeichen enthalten!) so an SCRIPT_2 senden kann, daß sie als solche erkannt werden...

Ausgabe sollte selbstverständlich sein:

Code:
:"arg 1"
:"arg 2"
 

abgdf

Guru
OsunSeyi schrieb:
Habe angefangen mit Emacs Org-Mode und kann mich einfach nicht an die Tastenkombinationen gewöhnen.
es passiert einfach zu oft, daß ich versehentlich irgendwas falsches Tippe und dann nicht ad hoc wieder zurück komme
ich dachte mir, es wäre sinnvoll, mittels 'Xbindkeys' einfach die Emacs-Kürzel zu überschreiben, also die bei Emacs üblichen Kürzel mittels den mir gebräuchlichen Keys aufzurufen.
Dazu wäre es nun aber wieder ganz chick, in Xbindkeys Shortcuts definieren zu können, die sich tatsächlich nur auf bestimmte Fenster beziehen.
Das ist alles eine sehr schlechte Idee.
Lern' einfach vim. Damit wird man glücklich, und den anderen Kram brauchst Du nicht.
 
OP
OsunSeyi

OsunSeyi

Hacker
Ok, vielen Dank für den Tip...
Ein böser Mann namens DT hat mich darauf gebracht :p

Trotzdem würde ich das gerne hinbekommen mit den Argumenten zusammenschrauben!

Code:
eval "SCRIPT_2 ${ARR[@]}"

...Juchuh
Ich weiß zwar nicht, was da passiert...

Darum wäre es richtiger, wenn Ihr dazu noch was sagen könntet, ehrlich gesagt !?
 
OsunSeyi schrieb:
..
Mir ist nicht klar geworden, wie ich die Argumente (welche Leerzeichen enthalten!) ..
Das kann dir natürlich nicht klar sein. Das Problem hast nicht du, sondern xte.
xte ist ein Sonderfall.

Fast alle Programme unter unix verwenden ein - (Dash) oder ein -- (doppel Dash) als Referenz für den Argument stack.
Beispiel:
Code:
# tar -v -C "/path" -cf "/path/irgend ein pfad"
Leerzeichen werden in diesem Verfahren auch ordentlich als Teil des Arguments erkannt

Oder mit doppel Dash
Code:
# tar --exclude="irgend was" --lzip
auch damit stellt das Leerzeichen kein Problem dar, es ist ein Teil des Arguments.

Der Programmierer von xte hat sich anders entschieden und geht seinen eigenen Weg.
Er verzichtet auf die bekannte Methode mit Dash und wertet die Argumente selbst aus.
Damit wirst du gezwungen, seiner sehr speziellen Methode gerecht zu werden.
Beispiel
Code:
# xte "keydown Control_L" "keydown L" "keyup Control_K" "sleep 1.2" "keyup K"
Damit hat er die Anweisung (keydown) UND das Argument (Control_L) in einem string
und muß die Leerzeichen außerhalb "" und innerhalb "" anders behandeln.
Nämlich a.) als Teil des Arguments UND b.) als Trenner zwischen Anweisung und Argument UND c.) als Trenner zwischen den einzelnen Anweisungen.
Warum der Programmierer von xte das so exotisch gelöst hat, weiß nur er.
Dass das - vor allem in scripts - Probleme verursacht, wird er wohl auch wissen.

Die Lösung könnte ja auch so aussehen:
Code:
# xte --keydown="Control_L" --keydown L --keyup="Control_K" --sleep=1.2 --keyup K
Damit hätte sich dein Problem erst gar nicht ergeben.

Gruß
Gräfin Klara
 
OP
OsunSeyi

OsunSeyi

Hacker
8) Sehr vielen lieben Dank, Gräfin!

Erstens beruhigt das schon und zweitens ist das hier wirklich ein tolles Forum (off Topic)
Muss man echt mal sagen!
 
OP
OsunSeyi

OsunSeyi

Hacker
abgdf schrieb:
Das ist alles eine sehr schlechte Idee.
Lern' einfach vim. Damit wird man glücklich, und den anderen Kram brauchst Du nicht.

Ja da mag was dran sein...

1.) Ich kann nicht blind tippen, und für die Vim-Keybindings immer erst mit der rechten Hand die Mitte der Tastatur (ja, da ist ein kleiner Nippel) finden zu müssen ist mir eher fremd.

2.) In Emacs zB ausgerechnet Alt+W zum ausschneiden (für mich immer noch Strg+X) benützen zu müssen ist schon irgendwie sch... Also den Daumen für Alt benutzen !?

3.) Es geht mir ja um den hochgelobten Org-Mode, den Vim nun mal nicht hat.
Ein Tool, was es mir erlaubt, Projekte zu strukturieren (zu 'hacken') wäre genau das was ich bräuchte.

4.) Und dann noch via FTP-Export Dokumente erstellen zu können, wäre schon was.
Mein bisher heißgeliebtes Abiword ist auf meinem Salix unerträglich buggy und natürlich, wenn man so wie ich lieber mit einem Texteditor ein reines Textdokument oder meinetwegen in Markdown schreibt (Pandoc), stellt das die Verwendung eines Wysiwyg in Frage...
LaTEX lernen ist dennoch etwas hoch gegriffen.

5.) Nur auf Emacs bezogen mit Xbinkeys Keykombis einfach umzumappen klappt zwar, ist aber mit Strg+X nicht möglich, weil Emacs ausgerechnet diese Kombination zwingend braucht.

6.) Die ganzen anderen Möglichkeiten von Emacs (Mail, Browser, Pdf-Viewer) brauche ich eigentlich nicht...

Also, wie gesagt, Org-Mode wäre schon schön, aber der 'ganz normale' Editiervorgang insofern eine Qual, als daß ich mich immer verhaue und beileibe nicht so 'normal' schreiben kann wie jetzt gerade zB...

mit vielen grüßen
tom
 

abgdf

Guru
Also, Du verwendest normalerweise Scite, der sich anscheinend wie ein Windows-Editor verhält.
Das mit "blind tippen" und "Nippel in der Mitte der Tastatur" bzgl. vim hab' ich noch nicht so ganz kapiert.
Für Dokumente verwendest Du Abiword. LaTeX fändest Du interessant, wäre aber zu kompliziert.
Dir gefällt der Org Mode von Emacs, aber nicht die komplizierten Emacs-Tastenkombinationen.

Also, ich hab' mich mal mit LaTeX beschäftigt, um damit Geschäftsbriefe zu schreiben. Hab' ich am Ende auch hinbekommen (einschließlich Briefkopf), es hatte letztlich aber keine großen Vorteile gegenüber OpenOffice/LibreOffice. Man sagt ja, es sei für mathematische Formeln gut. Aber der Formeleditor von OpenOffice/LibreOffice ist ehrlich gesagt auch nicht schlecht. Es ist auch stabiler als Abiword, würde ich sagen. Daher: Früher fand ich OpenOffice etwas träge, aber heute, mit den schnellen Rechnern, läuft es eigentlich ziemlich gut, finde ich. Es macht auch, was es soll. Hat halt auch (wie Abiword) die Windows-Tastenkombinationen.

Zum Org Mode finde ich unten auf der Seite, daß es sowas eingeschränkt auch für andere Editoren, insbesondere für vim gibt. Das könnte man ja auch mal ausprobieren (obwohl Zusätze für vim zu installieren nicht so ganz einfach ist, wenn man vim noch nicht so gut kennt):
https://orgmode.org
 
OP
OsunSeyi

OsunSeyi

Hacker
abgdf schrieb:
Also, Du verwendest normalerweise Scite, der sich anscheinend wie ein Windows-Editor verhält.
Das mit "blind tippen" und "Nippel in der Mitte der Tastatur" bzgl. vim hab' ich noch nicht so ganz kapiert.

Soweit ich weiß, ist bei Vim (und etlichen anderen Programmen, die sich an Vim orientieren), vieles um 'J' auf der Tastatur orientiert. Also für Leute gemacht, die blind tippen gelernt haben und deren Hände beim tippen auf der Tastatur liegen.

Für mich ist es (bislang) 'normal', Strg+X/C/V und die Arrow-Tasten zur Navigation zu benutzen. Ich habe aber auch nie richtig tippen gelernt, obwohl es auch bei mir nicht so arg langsam geht, liegen die Augen beim Tippen auf der Tastatur und nicht auf dem Bildschirm.

Ich behaupte, das genau ist die große Hürde für mich, weil ich mich in den Tastenkombis nicht so sehr an der Bedeutung langhangle (wie Yank Y für einfügen) sondern an haptischen Gegebenheiten.

Scite gibt's auch für Windows, klar, aber ich darf mal an Geany, Gedit, Wysiwyg-Programme, Gnumeric etc erinnern: Überall ^X ^C ^V.

Es ist also nicht so selbstverständlich, mal eben auf was anderes umzusteigen...

Das Gleiche für den Window-Manager (Spectrwm): Der würde auch gerne an Vim angelehnte Keybindings verwenden, für alle Vim-User geil. Bei mir aber seit Jahr und Tag Super+Space Alt+Space, Super bzw Alt + Arrow-Tasten usw usw.

Also alles möglichst auf der Grundlinie. Eigentlich habe ich keinen besonderen Bock, mir das jetzt alles 'umzuerziehen'...
 

abgdf

Guru
OsunSeyi schrieb:
Soweit ich weiß, ist bei Vim (und etlichen anderen Programmen, die sich an Vim orientieren), vieles um 'J' auf der Tastatur orientiert. Also für Leute gemacht, die blind tippen gelernt haben und deren Hände beim tippen auf der Tastatur liegen.
Für mich ist es (bislang) 'normal', Strg+X/C/V und die Arrow-Tasten zur Navigation zu benutzen.
Bei der Navigation in vim gibt es diese Sachen mit 'J' und Umgebung.
Aber man kann auch die Arrow-Tasten verwenden. (Das tue ich meistens.)

Kopieren und einfügen von Text funktioniert allerdings etwas anders als von Windows-Programmen gewohnt, das stimmt. Wenn man sich damit vertraut gemacht hat, hat es aber auch seinen Charme.
 
abgdf schrieb:
.., hat es aber auch seinen Charme.
Charme? Es kann auch emotional werden.

off_topic()

Vor einigen Jahren, wir zu zweit aus der 3.Etage (Unix/Linux) beim Essen,
am Nebentisch die von Microsoft. Wir verwenden Slickedit mit Vim Emulation,
die von der Microsoftabteilung alle den Editor von Visual Studio.

Microsoft: Können Sie das Glas noch halten?
Ich: Wie?
Microsoft: Habe gehört, es gibt bei euch Ausfälle wegen Gelenkluxationen.
Ich: Wie?
Microsoft: Ja, Vim und so, da gibts ja Griffe wie Daumen,Finger und großer Zeh, das geht an die Gelenke.
Kollege: Wer Ctrl/C kann, der darf bei euch anfangen, für Ctrl/V gibts Nachschulung, so hört man.
Microsoft springt hoch, wollte wohl eine Ansprache halten. Jackenknopf verfängt sich an Suppenschüssel,
Nachbartisch überschwemmt. Wirtin taucht auf: "Was ist da los?"
Ich: Falsche Tastenkombination, so sieht's dann aus

Wir haben uns zerkugelt vor Lachen ..
Welcher Editor ist besser, welche Tastenkombinationen sind die effizientesten, das konnte nie geklärt werden.
 

Christina

Moderator
Teammitglied
Gräfin Klara schrieb:
off_topic()
(…)
Welcher Editor ist besser, welche Tastenkombinationen sind die effizientesten, das konnte nie geklärt werden.
Wie erstellt man eine Zufallszahl / Zufallszeichenkette?
  —  Setze einen MS-Windows-Nutzer vor den vi und lasse ihn den Editor beenden. ;)
 
OP
OsunSeyi

OsunSeyi

Hacker
Gefunden:
Code:
M-x cua-mode
https://www.emacswiki.org/emacs/CuaMode

Es gibt wohl auch weitere Möglichkeiten:
zB Ergoemacs-Mode u.A.

Zum obigen:
Da wird der Begriff 'non-technical' writer benutzt.
Es ist ja nicht so, daß jemand, der sein Brot nicht als Programmierer verdient und darum seine Tastatur nicht unter Einbeziehung des großen Zehs benutzt (obwohl ich das durchaus bewundere) dewegen gleich Windows benutzen muss... Das wäre ja auch schrecklich!
 
Oben