Ich weiß, dass man in ~ / .bashrc keine Leerzeichen um =
Zeichen in der Zuordnung setzen darf :
$ tail -n2 ~/.bashrc
alias a="echo 'You hit a!'"
alias b = "echo 'You hit b!'"
$ a
You hit a!
$ b
b: command not found
Ich überprüfe die MySQL-Konfigurationsdatei /etc/my.cnf
und habe Folgendes gefunden:
tmpdir=/mnt/ramdisk
key_buffer_size = 1024M
innodb_buffer_pool_size = 512M
query_cache_size=16M
Wie kann ich überprüfen, ob die Leerzeichen um die =
Schilder kein Problem darstellen?
Beachten Sie, dass diese Frage nicht spezifisch für die /etc/my.cnf
Datei ist, sondern für * NIX-Konfigurationsdateien im Allgemeinen. Meine erste Neigung ist RTFM, aber man mysql
ich erwähne das Problem tatsächlich nicht und wenn ich für jeden Fall online auf die Jagd gehen muss, werde ich nie irgendwohin gelangen. Gibt es eine Konvention oder eine einfache Möglichkeit, dies zu überprüfen? Wie zu sehen ist, haben mehrere Personen diese Datei bearbeitet (unterschiedliche Konventionen für =
Zeichen), und ich kann sie weder dazu zwingen, keine Leerzeichen zu verwenden, noch kann ich verrückt werden, wenn ich alles überprüfe, was konfiguriert wurde und möglicherweise korrekt ist oder nicht.
BEARBEITEN: Ich möchte sicherstellen, dass die aktuell konfigurierten Dateien ordnungsgemäß ausgeführt werden. Wenn ich Dateien selbst konfiguriere, befolge ich die Konvention dessen, was der Paketbetreuer dort eingegeben hat.
quelle
Antworten:
Ich werde das allgemeiner beantworten - ein wenig auf die gesamte "Unix- Lernerfahrung " schauen .
In Ihrem Beispiel verwenden Sie zwei Tools und sehen, dass die Sprache ähnlich ist. Es ist nur unklar, wann was genau zu verwenden ist. Natürlich können Sie davon ausgehen, dass es eine klare Struktur gibt , also bitten Sie uns, dies zu erklären.
Der Fall mit dem Raum um
=
ist nur ein Beispiel - es gibt viele ähnliche, aber bot-ruhige Fälle.Es muss eine Logik geben, oder?!
Die Regeln , wie Code für einige schreiben Werkzeug , Shell, Datenbank usw. nur abhängen auf , was dieses besondere Werkzeug erfordert .
Das bedeutet, dass die Werkzeuge technisch völlig unabhängig sind. Die logische Beziehung , die Sie meiner Meinung nach erwarten, existiert einfach nicht .
Die offensichtliche Ähnlichkeit der Sprachen, die Sie sehen, ist nicht Teil der Programmimplementierung . Die Ähnlichkeit besteht darin, dass die Entwickler vereinbart hatten, wie dies zu tun ist, als sie es für ein bestimmtes Programm aufschrieben. Aber Menschen können nur teilweise zustimmen .
Die Beziehung, die Sie sehen, ist eine kulturelle Sache - sie ist weder Teil der Implementierung noch der Definition der Sprache .
Was tun in der Praxis, nachdem wir die Theorie behandelt haben?
Ein großer Schritt besteht darin, zu akzeptieren, dass die von Ihnen erwartete Konsistenz nicht vorhanden ist - was beim Verständnis der Gründe viel einfacher ist -. Ich hoffe, der theoretische Teil hilft dabei.
Wenn Sie zwei Tools haben, die nicht dieselbe Konfigurationssprache verwenden (z. B. beide Bash-Skripte), hilft es nicht viel, die Details der Syntax des einen zu kennen, um das andere zu verstehen.
Sie müssen also in der Tat unabhängig nach Details suchen . Stellen Sie sicher, dass Sie wissen, wo Sie die Referenzdokumentation für jede finden.
Positiv zu vermerken ist, dass es eine gewisse Konsistenz gibt, die Sie nicht erwartet haben: Im Kontext eines einzelnen Tools (oder verschiedener Tools, die dieselbe Sprache verwenden) können Sie ziemlich sicher sein, dass die Syntax konsistent ist.
In Ihrem
mysql
Beispiel bedeutet dies, dass Sie davon ausgehen können, dass alle Zeilen dieselbe Regel haben. Die Regel lautet also "Leerzeichen vor und nach=
ist nicht relevant ".Es gibt große Unterschiede, wie schwierig es ist, die Konfigurations- oder Skriptsprache eines Tools zu lernen oder zu verwenden.
Es kann sich um " List foo values in cmd-foo.conf, einen pro Zeile" handeln.
Es kann eine vollständige Skriptsprache sein , die auch an anderer Stelle verwendet wird. Dann haben Sie ein leistungsstarkes Tool zum Schreiben von Konfigurationen - und in einigen Fällen ist das einfach nur nett, in anderen werden Sie das wirklich brauchen.
Komplexe Tools oder große Familien verwandter Tools verwenden manchmal nur eine sehr komplexe Syntax für spezielle Konfigurationsdateien - (einige berühmte Beispiele sind
sendmail
undvim
).Andere verwenden ein allgemeines SkriptSprache als Basis, und erweitern Sie diese Sprache, um die besonderen Bedürfnisse zu unterstützen , manchmal auf komplexe Weise, wie es die Sprache erlaubt. Dies wäre ein sehr spezifischer Fall einer domänenspezifischen Sprache ( DSL ) .
quelle
Bash interpretiert eine Zeile mit Text gefolgt von a
=
als Zuweisung zu einer Variablen, aber eine Zeile mit Text gefolgt von einem Leerzeichen als Befehl mit einem Argument.var=assignment
vs.command =argument
Bash-Skripte funktionieren nach dem Prinzip, dass alles im Skript so ist, als hätten Sie es in die Befehlszeile eingegeben.
In Konfigurationsdateien, die nicht von
bash
(oder einer anderen Shell) interpretiert werden , wird dies vom Parser bestimmt, der zum Lesen der Konfigurationsdatei verwendet wird. Einige Parser nehmen Leerzeichen ein, andere nicht. In diesem Fall liegt es an der Anwendung. Persönlich gehe ich mit jeder Konvention vor, die die Standardkonfigurationsdatei verwendet hat.quelle
a = b
ist möglicherweise nicht immer akzeptabel,a=b
sollte aber immer funktionieren..bashrc ist nichts anderes als eine Konfigurationsdatei für bash, genau wie my.cnf, php.ini, httpd.conf oder eine launchd-Liste. Jedes hat seine eigene Syntax, die von der No-Space-Zuweisung von Bash bis zur XML-Tag-Suppe von launchd reicht (es gibt auch eine Binärversion: -O).
Es gibt keine festen Konventionen, und Sie haben bereits die Prime-Direktive von Unix entdeckt: Lesen Sie das Fine Manual.
quelle
.bashrc
ist keine Konfigurationsdatei für Bash..bashrc
ist ein Shell-Skript, das jedes Mal ausgeführt wird, wenn ein Bash-Prozess gestartet wird. Es kann verwendet werden, um Bash zu konfigurieren, aber es kann auch verwendet werden, um alle möglichen anderen Dinge zu tun: Es ist ein Skript, keine Konfigurationsdatei.Einige Programme bieten eine Überprüfung der Konfigurationsdatei an, zum Beispiel:
Andernfalls könnten Sie die ursprünglichen Konfigurationsdateien aus den Repositorys abrufen und sie mit diff mit der aktuellen vergleichen.
quelle
Die Leerzeichen um das
=
Zeichen sind immer problematisch, wenn Sie eine Aufgabe in ausführenbash
. Hier gibt es keine Ausnahme. Sie müssen alle Leerzeichen entfernen,=
wenn Sie eine gültige einfache Zuweisung (keine Erweiterung, keine Arithmetik, keine Array-Zuweisung) erhalten möchtenbash
.Für die Konfigurationsdatei
bash
besteht keine Beziehung , da jede Software einen eigenen Parser zum Parsen ihrer Konfigurationsdatei hat. Sie müssen die Dokumentation lesen, um zu erfahren, welche Syntax in der Konfigurationsdatei zulässig ist.Ein Beispiel ist
mysql
, dass es in seinem Init-Skript/etc/init.d/mysqld
einen Parser für Folgendes hatmy.cnf
:quelle
(( var = 12 ))
odervar=( value )
oder$((var = 12))
oder${var[foo = 12]}