Seltsames Makefile-Problem bei der Ausfuehrung von Shellcode

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Ghost
Beiträge: 264
Registriert: 24.03.2003 00:17:01
Wohnort: Bremen

Seltsames Makefile-Problem bei der Ausfuehrung von Shellcode

Beitrag von Ghost » 07.06.2006 17:18:42

Hallo zusammen,

ich habe folgenden Shellcode:

Code: Alles auswählen

tty | awk -F/ '{print $4}'
ergibt: 2

Der soll mir die PTS-Nummer der aktuellen Shell geben. Das klappt auch auf der Shell wunderboar, aber sobald ich es in einem Makefile benutzen wil, gibt mir das Programm nur die Ausgabe von tty zurueck. Weiss jemand voran das liegt?

Code: Alles auswählen

PTS     = `tty | awk -F/ '{print $4}'`
test:
     echo $(PTS)
ergibt /dev/pts/2

Hat jemand eine Ahnung wie ich das umschiffen kann? Das Makemanual war da irgendwie nicht sehr hilfreich.

Gruss
Ghost
1x "Debian Unstable"
1x "Debian Testing"

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 07.06.2006 18:07:06

Ghost hat geschrieben:Hat jemand eine Ahnung wie ich das umschiffen kann?
so:

Code: Alles auswählen

root@gms4:~# cat Makefile
PTS     = $(shell tty | awk -F/ '{print $$4 }' )
test:
        @echo $(PTS)
root@gms4:~# make
3
Ghost hat geschrieben: Das Makemanual war da irgendwie nicht sehr hilfreich.
hier die relevanten Stellen (sind einfach zu finden, wenn man weiß wonach man suchen muß :) )
http://www.gnu.org/software/make/manual ... l-Function
http://www.gnu.org/software/make/manual ... n-Commands

Gruß
gms

Ghost
Beiträge: 264
Registriert: 24.03.2003 00:17:01
Wohnort: Bremen

Beitrag von Ghost » 08.06.2006 13:59:36

Danke. Das klappt wunderbar. Ich war gestern auch schon auf diese Funktion gestossen, aber irgendwie habe ich gestern wohl etwas anderes gemacht, denn ich hatte das gleiche Ergebnis wie mit den Backquotes und da im Manual steht:
The shell function performs the same function that backquotes (``') perform in most shells
habe ich es bei den Backquotes belassen.

danke.

Gruss
Ghost
1x "Debian Unstable"
1x "Debian Testing"

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 08.06.2006 17:00:20

Ghost hat geschrieben:aber irgendwie habe ich gestern wohl etwas anderes gemacht, denn ich hatte das gleiche Ergebnis wie mit den Backquotes
die entscheidende Änderung war nicht die Shellfunktion, sondern das zusätzlche Dollarzeichen vor dem "$4"
Ohne diesem wird "$4" als (leere) Makefilevariable interpretiert. Daher wird an die Shell folgendes übergeben.

Code: Alles auswählen

tty | awk -F/ '{print}'
daher bekommst du auch "/dev/pts/2" zurück.
"$$4" wird nicht als Makefilevariable interpretiert, dafür wird ein Dollarzeichen entfernt und die so erhaltene Zeichenkette an die Shell übergeben:

Code: Alles auswählen

tty | awk -F/ '{print $4}'
Gruß
gms

Ghost
Beiträge: 264
Registriert: 24.03.2003 00:17:01
Wohnort: Bremen

Beitrag von Ghost » 11.06.2006 11:10:57

Autsch ok. Jetzt sehe ich es auch. Ok. Danke für die Aufklärung. Da war ich wohl nicht mehr so ganz ausgeschlafen.

Gruss
Ghost
1x "Debian Unstable"
1x "Debian Testing"

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 11.06.2006 11:16:42

JFYI, den awk-Teil kannst du auch durch

Code: Alles auswählen

cut -d/ -f4
ersetzen.

Ghost
Beiträge: 264
Registriert: 24.03.2003 00:17:01
Wohnort: Bremen

Beitrag von Ghost » 13.06.2006 10:19:48

Nettes Tool. Kannte ich noch gar nicht. Danke.

Gruss
Ghost
1x "Debian Unstable"
1x "Debian Testing"

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 13.06.2006 12:42:25

/offtopic
@all
Das ist ein phantastischer Thread wie ich ihn mir immer wünschen würde
- sprechender Thread Titel
- klar verständliche Fragestellung
- klar verständliche Antwort
- Gliederung wie auch Textformatierung 1A
- kurze prägnante Aussagen die zum Ziel führen
- Response wie es zu Problemen kam und somit nachvollziehbares (für den Leser) lösen von Problemen
- Rechtschreibung und Grammatik in Ordnung
- Aufzeigen von alternativen Lösungswegen die evtl. Vorteilhafter sind

markus

Antworten