bash script als binary darstellen

M

mynamenixname

Mitglied
Thread Starter
Dabei seit
05.06.2010
Beiträge
39
Reaktionspunkte
0
Hallo,
ich bastel immer mal wieder mit Skripts und Programmen rum und nun habe ich etwas interessantes festgestellt:
Es gibt unter Mac OS X bash-Skripte, die als ausführbare Unix-Datei im Finder angezeigt werden und sich auch so verwenden lassen. Das finde ich sehr spannend, um z.B. zu einem Application-Bundle Startparameter hinzuzufügen.
Also habe ich versucht selbst Skripts zu schreiben und diese in das selbe Format zu bringen. - Erfolglos. Nehme ich nun so eine (ich nenne die Ausführbaren Unix Dateien im folgenden einfach AUD) AUD und modifiziere ihren Inhalt, so gehen je nach verwendetem Editor die AUD-Eigenschaften verloren. Okay.
Nun habe ich also eine AUD-Datei dupliziert, einmal die AUD-Eigenschaften "zerstört" (start 2) und sie einmal behalten (start).
In einem Binär-Editor (der leider nur den Inhalt der Datei anzuzeigen scheint) waren start und start 2 identisch.
Mit ls -l untersucht ergab sich folgendes:

-rwxr-xr-x 1 mynamenixname staff 533 29 Nov 13:28 /Users/mynamenixname/Desktop/start
-rwxr-xr-x@ 1 mynamenixname staff 533 26 Dez 23:55 /Users/mynamenixname/Desktop/start 2
-rw-r--r--@ 1 mynamenixname staff 190 27 Dez 00:01 /Users/mynamenixname/Desktop/start 4

start 4 ist hierbei eine einfache Textdatei.

start, die AUD hat demzufolge als einziges KEIN @, was angeblich bedeutet sie verfügt über keine "erweiterten Attribute"
Diese lassen sich mit xattr untersuchen:


mynamenixname:~ >xattr -l /Users/mynamenixname/Desktop/start\ 4
com.apple.FinderInfo:
00000000 46 52 41 64 53 4D 55 4C 00 00 00 00 00 00 00 00 |FRAdSMUL........|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020
com.apple.TextEncoding: utf-8;134217984
mynamenixname:~ >xattr -l /Users/mynamenixname/Desktop/start\ 2
com.apple.FinderInfo:
00000000 46 52 41 64 53 4D 55 4C 00 00 00 00 00 00 00 00 |FRAdSMUL........|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020
com.apple.TextEncoding: utf-8;134217984
mynamenixname:~ >xattr -l /Users/mynamenixname/Desktop/start
mynamenixname:~ >


So, nun möchte ich euch gerne fragen, ob ihr Ahnung davon habt. Wisst ihr, wie man diese AUDs erstellen kann? Oder wie man erweiterte Attribute schreiben kann?

Vielen Dank schon einmal
mynamenixname
 
Wen ich es nun richtig verstanden habe geht es dir darum eine Datei ausführbar zu machen.

Code:
$ ls -l
-rw-r--r--  1 felix  staff  0 Dec 27 00:48 test.sh
-rw-r--r--  1 felix  staff  0 Dec 27 00:48 test2.sh

$ chmod +x test2.sh 

$ ls -l
-rw-r--r--  1 felix  staff  0 Dec 27 00:48 test.sh
-rwxr-xr-x  1 felix  staff  0 Dec 27 00:48 test2.sh

$man chmod
sollte den rest beantworten.

PS: Das @ habe ich nur bei meinem Libary Ordner.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: mynamenixname
Neben Shellskripten sind auch normale Programme ausfürbare Unix-Programme. Deine AUD werden einfach Binaries sein. Die erstellt man weitläufig in einer Programmiersprache wie C, Objective-C, C++, Fortran usw. usf.

Das Execute-Bit das Felix erwähnt, markiert dann die Datei als Executable, sodass die Shell weiß, dass sie hier etwas ausführen kann.
 
  • Gefällt mir
Reaktionen: mynamenixname
Vielen Dank,
das witzige ist es ja gerade, dass es KEINE "compilte" Programme, sondern wirklich nur shell-Skripte sind.
Ich habe noch etwas herumgespielt und es dann doch noch herausbekommen.
Nachdem man die datei mit chmod +x ausführbar gemacht hat muss man noch die com.apple.FinderInfo mit xattr entfernen und dann werden die Skripte wie binares behandelt.
Wer hätte das gedacht? ;)
 
Ich verstehe gerade nicht was daran jetzt so besonders sein sollte... Und warum muss man irgendetwas mit xattr entfernen? Ich glaube du machst es komplizierter als es ist. Und shell-Skripte oder richtig compilierte Programme, da gibt es doch echt keinen wirklich großen Unterschied in dem Punkt. :O
 
Ich glaube, Du musst sie einfach .command nennen

Alex
 
Ich mach das bei C++ und Perl progs auch immer mit chmod a+x <filename>...
 
Zurück
Oben Unten