PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ursprünglichen IFS wiederherstellen



Peter84
06.09.2005, 22:03
Hi,
Ich kenn mich nicht besonders aus mit Shell-Programmierung und hab deswegen auf der bash den Internal Field Separator geändert, ohen ihn vorher in einer anderen Variablen zu sichern. Meine Frage nun, wie kann ich dem IFS die ursprüngliche Einstellung (leerzeichen, tab, newline) wieder zuweisen?

qmasterrr
06.09.2005, 23:37
Hi, und willlkommen im Board

Aus der Manpage von Bash

IFS The Internal Field Separator that is used for word splitting
after expansion and to split lines into words with the read
builtin command. The default value is ``<space><tab><new-
line>''.

Ich vermute, das hilft dir weiter.

devilz
06.09.2005, 23:40
Wird der nicht spätestens nach dem reboot wieder gesetzt ?

Xanti
07.09.2005, 08:12
unset IFS

Gruss, Phorus

Wolfgang
07.09.2005, 08:24
Wird der nicht spätestens nach dem reboot wieder gesetzt ?

Na aber ... :oldman
wir sind doch nicht bei Wintendo.

:rtfm:
:D :D :D :D
Gruß Wolfgang

Peter84
07.09.2005, 08:31
Vielen Dank erstmal, aber bislang haben mir die Vorschläge noch nicht weiterhelfen können. Scheint wohl wirklich ein größeres Problem zu sein. Falls noch einem was einfällt wär ich dankbar... :-)

Xanti
07.09.2005, 08:35
Wieso hilft Dir mein Hinweis nicht weiter?



[~]$ A=123
[~]$ IFS=2
[~]$ echo $A
1 3
[~]$ unset IFS
[~]$ echo $A
123


edit:



[~]$ A="123 123"
[~]$ IFS=2
[~]$ set $A
[~]$ echo $1
1
[~]$ unset IFS
[~]$ set $A
[~]$ echo $1
123

Peter84
07.09.2005, 09:42
Sorry, das unset funktioniert bei mir nicht (mehr), kann damit nicht den ursprünglichen IFS wiederherstellen

Xanti
07.09.2005, 10:19
Welche Shell nutzt Du? Habe oben irgendwas mit Bash gelesen (mein Versehen)...

Wolfgang
07.09.2005, 10:20
Vielen Dank erstmal, aber bislang haben mir die Vorschläge noch nicht weiterhelfen können. Scheint wohl wirklich ein größeres Problem zu sein. Falls noch einem was einfällt wär ich dankbar... :-)

Wo ist das Problem?
Woran machst du denn deine Aussage fest?
Was funktioniert denn nicht wie erwartet?
Gib doch mal ein Beispiel von deinen Code, der mit dem vermeindlichen falschen IFS nicht funktioniert.
Außerdem wird diese Variable mit jeder neuen Shell neu inititialisiert.
Selbst nach Verlassen einer Subshell steht dieser wieder auf dem default Wert.

Eventuell solltest du doch mal in die man von der bash sehen.

Gruß Wolfgang

Peter84
07.09.2005, 10:55
Ok, danke, das Problem hat sich erledigt - wie gesagt, bin nicht der große Spezialist in der Shell-Programmierung! Hab immer mit
echo $IFS | od -bc kontrolliert, ob der IFS wieder richtig gesetzt ist - und dabei halt die Anführungszeichen vergessen *schäm*. Folglich müsste er also nach jedem Neustart der Shell auch wieder auf den Ausgangswert gesetzt werden, denke ich. Vielleicht hats aber auch nur einfach mit unset geklappt. Aber nochmals vielen Dank für euer Mitwirken!

Schlaubi_fi.de
07.09.2005, 19:46
Na klar ist alles nach einem Reboot wieder weg. Wenn du eine Variablenzuweisung in der Shell machst wird das im Speicher abgebildet und gilt nur so lange die Shell aktiv ist. Normalerweise hätte ein erneuter Aufruf der Shell auch genügt. Bootfest variablen setzen - dazu müssen die Daten schon auf die Platte geschrieben werden z.B. in eine Datei, welche beim Start der Shell dann erst gelesen werden a la .profile bzw. export $PATH....