eigenes C- Programm in ShellScript aufrufen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Generic1
Beiträge: 78
Registriert: 15.11.2012 13:41:28

eigenes C- Programm in ShellScript aufrufen

Beitrag von Generic1 » 05.02.2013 19:13:51

Hallo,

ist es eigentlich möglich, ein eigenes C Programm, welches ich mit

gcc -o test test.c

compiliert habe, in einem Shellscript aufzurufen?
Normal ruf ich dieses Programm ja mit

./test

auf, um es auszuführen.
Geht das auch irgendwie in einem Shellscript?

Vielen Dank,
lg
Max

pferdefreund
Beiträge: 3799
Registriert: 26.02.2009 14:35:56

Re: eigenes C- Programm in ShellScript aufrufen

Beitrag von pferdefreund » 05.02.2013 19:21:27

klar doch - Programm nach /usr/local/bin (der Ordnung halber)
script
#!/bin/bash < oder andere shell
/usr/local/bin/test und eventuell Parameter
echo "RC meines Programmes" $?

wobei ein test ein unglücklicher Name ist, weil auch Bestandteil der bash
if [ test usw..]
Besser sprechender name wie meincprog oder sowas..

Generic1
Beiträge: 78
Registriert: 15.11.2012 13:41:28

Re: eigenes C- Programm in ShellScript aufrufen

Beitrag von Generic1 » 05.02.2013 19:31:07

und das geht alles auch mit übergabe prarameter und rückgabewert meines Programmes?
Besten Dank,
lg
Generic1

DeletedUserReAsG

Re: eigenes C- Programm in ShellScript aufrufen

Beitrag von DeletedUserReAsG » 05.02.2013 19:33:54

/usr/bin/test war das Argument, seine Programme nicht 'test' zu nennen. Bei Scripten ist’s ansonsten eine gute Idee, mit absoluten Pfaden zu arbeiten.

Parameter lassen sich wie üblich übergeben, Rückgabewerte übernehmen, ja.

cu,
niemand

Benutzeravatar
Meillo
Moderator
Beiträge: 9261
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: eigenes C- Programm in ShellScript aufrufen

Beitrag von Meillo » 05.02.2013 19:42:31

Es gibt keinen grundsaetzlichen Unterschied zwischen Systemprogrammen und eigenen Programmen. Das ist ein Qualitaetsmerkmal von Unix. Das was du als Unterschied wahrnehmen koenntest haengt von PATH ab und diese Variable kannst du selbst anpassen.
Use ed once in a while!

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: eigenes C- Programm in ShellScript aufrufen

Beitrag von Natureshadow » 05.02.2013 19:44:18

pferdefreund hat geschrieben:klar doch - Programm nach /usr/local/bin
WTF? Er wollte doch ./test aufrufen. Also wohl am Besten mit ./test.

-nik

chaisen
Beiträge: 70
Registriert: 26.06.2012 16:30:44
Lizenz eigener Beiträge: neue BSD Lizenz

Re: eigenes C- Programm in ShellScript aufrufen

Beitrag von chaisen » 05.02.2013 19:46:27

Natureshadow hat geschrieben: WTF? Er wollte doch ./test aufrufen. Also wohl am Besten mit ./test.
Ein Porgramm in einem Script so aufzurufen ist wohl nicht sehr sinnvoll.

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: eigenes C- Programm in ShellScript aufrufen

Beitrag von Natureshadow » 05.02.2013 19:49:30

chaisen hat geschrieben:
Natureshadow hat geschrieben: WTF? Er wollte doch ./test aufrufen. Also wohl am Besten mit ./test.
Ein Porgramm in einem Script so aufzurufen ist wohl nicht sehr sinnvoll.
Warum das denn nicht? Nach /usr kopieren ist noch sinnloser. Wieso sollte er root sein und das können?

chaisen
Beiträge: 70
Registriert: 26.06.2012 16:30:44
Lizenz eigener Beiträge: neue BSD Lizenz

Re: eigenes C- Programm in ShellScript aufrufen

Beitrag von chaisen » 05.02.2013 19:51:27

Natureshadow hat geschrieben: Warum das denn nicht? Nach /usr kopieren ist noch sinnloser. Wieso sollte er root sein und das können?
Weil das Script so nur funktioniert wenn er sich im richtigen Ordner befindet, wenn dann sollte man es mit den absoluten Pfad aufrufen.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: eigenes C- Programm in ShellScript aufrufen

Beitrag von Cae » 05.02.2013 20:05:58

Es stellt kein Problem dar. Demo:

Code: Alles auswählen

$ cat >/tmp/bin.c <<EOF
> #include <stdio.h>
> 
> int main(int argc, char **argv) {
>       while (--argc) printf("%3d: %s\n", argc, argv[argc]);
> 
>       return 0;
> }
> EOF
$ gcc -Wall -W -o /tmp/bin /tmp/bin.c
$ /tmp/bin a b c
  3: c
  2: b
  1: a
$ cat >/tmp/script <<EOF
> #!/bin/sh
> 
> /tmp/bin a b c    
> echo "ret: '$?'"
> EOF
$ chmod +x /tmp/script
$ /tmp/script
  3: c
  2: b
  1: a
ret: '0'
$ 
Ob man nun einen absoluten Pfad in's Skript reinpackt (wie ich es getan habe) oder man einen relativen wie ./bin verwendet, ist Erwaegungssache. Ein lokaler Pfad bricht, sobald die Binary nicht im CWD beim Ausfuehren des Skripts befindet. Ein absoluter Pfad verhindert "mal eben umkopieren".

Demo (mit relativem Pfad ./bin a b c):

Code: Alles auswählen

$ cd /
$ /tmp/script
/tmp/script: 3: /tmp/script: ./bin: Permission denied
ret: '0'
$ cd /tmp
$ /tmp/script
  3: c
  2: b
  1: a
ret: '0'
$ 
Schoen und richtig waere natuerlich eine Loesung wie

Code: Alles auswählen

#!/bin/sh

prefix="$(dirname $0)"

$prefix/bin a b c
echo "ret: '0'"
im Skript. Es wird das Verzeichnis des ausgefuehrten Skriptes bestimmt und relativ dazu die Binary gestartet. Alternativ kann man auch dort hin cd'en und wieder zurueck.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: eigenes C- Programm in ShellScript aufrufen

Beitrag von Natureshadow » 05.02.2013 20:11:21

Cae hat geschrieben:Schoen und richtig waere natuerlich eine Loesung wie

Code: Alles auswählen

#!/bin/sh

prefix="$(dirname $0)"

$prefix/bin a b c
echo "ret: '0'"
im Skript. Es wird das Verzeichnis des ausgefuehrten Skriptes bestimmt und relativ dazu die Binary gestartet. Alternativ kann man auch dort hin cd'en und wieder zurueck.
Genau so.

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: AW: eigenes C- Programm in ShellScript aufrufen

Beitrag von newdeb » 06.02.2013 16:36:37

Natureshadow hat geschrieben:
Cae hat geschrieben:Schoen und richtig waere natuerlich eine Loesung wie

Code: Alles auswählen

#!/bin/sh

prefix="$(dirname $0)"

$prefix/bin a b c
echo "ret: '0'"
im Skript. Es wird das Verzeichnis des ausgefuehrten Skriptes bestimmt und relativ dazu die Binary gestartet. Alternativ kann man auch dort hin cd'en und wieder zurueck.
Genau so.
Naja, $0 ist nicht immer zuverlässig.

Code: Alles auswählen

$ ls -F
bny*  dir/  scr*
$ ls -l dir
insgesamt 0
lrwxrwxrwx 1 foo bar 6  6. Feb 16:04 lnk -> ../scr

$ cat scr
#!/bin/sh
echo "\$0 is $0"
prefix="$(dirname $0)"
$prefix/bny a b c

Code: Alles auswählen

$ ./bny a b c
a b c
$ ./scr
$0 is ./scr
a b c
Symlinks, Umlenkungen, Sourcing machen Probleme:

Code: Alles auswählen

$ cd dir
$ ./lnk
$0 is ./lnk
./lnk: line 4: ./bny: Datei oder Verzeichnis nicht gefunden
$ bash < ../scr
$0 is bash
bash: line 4: ./bny: Datei oder Verzeichnis nicht gefunden
$ . ../scr
$0 is bash
bash: ./bny: Datei oder Verzeichnis nicht gefunden

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: eigenes C- Programm in ShellScript aufrufen

Beitrag von Natureshadow » 06.02.2013 16:49:20

Code: Alles auswählen

real="$0"
[ -h "$real" ] && real="$(readlink "$real")"
prefix="$(dirname "$real")"

Antworten