gelöst: wofür steht \

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
mcb

gelöst: wofür steht \

Beitrag von mcb » 09.04.2021 17:45:58

Hall wofür steht der / die \ in folgendem Beispiel ?

Code: Alles auswählen

sudo apt install \
      wine \
      wine32 \
      wine64 \
      libwine \
      libwine:i386 \
      fonts-wine
Könnte man doch auch so tippen:

Code: Alles auswählen

apt install wine wine32 wi...
Zuletzt geändert von mcb am 09.04.2021 21:16:46, insgesamt 1-mal geändert.

Benutzeravatar
towo
Beiträge: 4403
Registriert: 27.02.2007 19:49:44
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Verständnisfrage wofür steht \

Beitrag von towo » 09.04.2021 17:47:14

Für einen Zeilenumbruch?

mcb

Re: Verständnisfrage wofür steht \

Beitrag von mcb » 09.04.2021 17:53:14

Danke !

- aber wozu ist der "gut" ?

Ich bin kein Programmierer (aber das zeigt die Frage ja schon) ...

Benutzeravatar
towo
Beiträge: 4403
Registriert: 27.02.2007 19:49:44
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Verständnisfrage wofür steht \

Beitrag von towo » 09.04.2021 17:56:14

Sowas macht man gerne in diversen Scripten, da es einfach übersichtlicher ist.
Mal als Beispiel mein Qemu Script:

Code: Alles auswählen

#!/bin/bash
USERID=towo
INTERFACE=$(sudo /usr/bin/tunctl -b -u $USERID -t tap3)
KVM_GUEST_NAME="Android"
sudo brctl addif bri0 $INTERFACE
sudo ip link set "$INTERFACE" master "bri0" up

qemu64 \
    -m 4096 \
    -smp cores=4,sockets=1 \
    -cpu host \
    -machine pc-q35-4.0,accel=kvm \
    -device virtio-vga,virgl=on,xres=1280,yres=800 \
    -display sdl,gl=on \
    -device intel-hda,id=sound0,msi=on \
    -device hda-micro,id=sound0-codec0,bus=sound0.0,cad=0 \
    -device qemu-xhci,id=xhci \
    -device usb-tablet,bus=xhci.0 \
    -net nic,macaddr=52:54:00:12:34:62,model=e1000 \
    -net tap,ifname=$INTERFACE,script=no,downscript=no \
    -drive file=/media/daten2/image/lineageos.qcow2,if=virtio,index=1,media=disk,cache=none,aio=threads \
sudo tunctl -d $INTERFACE
Wenn das alles in einer Zeile stehen würde, braucht man evtl. 3 Monitore, um alles zu sehen.

mcb

Re: Verständnisfrage wofür steht \

Beitrag von mcb » 09.04.2021 17:58:24

OK - Danke ! Jetzt macht es Sinn :THX:

TuxPeter
Beiträge: 1954
Registriert: 19.11.2008 20:39:02
Lizenz eigener Beiträge: MIT Lizenz

Re: Verständnisfrage wofür steht \

Beitrag von TuxPeter » 09.04.2021 18:42:17

Eigentlich bedeutet der Backslash keinen Zeilenumbruch, sondern "quotet" das nachfolgende Zeichen. D.h er sorgt dafür, dass die bash nicht am Zeilenumbruch mit der Interpretation der Zeile aufhört, indem er diesen Umbruch für die bash "unsichtbar" macht. Mal ein ganz einfaches Beispiel:

Code: Alles auswählen

$touch a b c d\ e\ f
$ ls
 a   b   c  'd e f'
Wie wir sehen, quotet auch der ls-Befehl, sonst wüssten wir nicht, dass es sich bei 'd e f' nur um eine Datei handelt

mcb

Re: Verständnisfrage wofür steht \

Beitrag von mcb » 09.04.2021 20:02:41

Also bedeutet:

Code: Alles auswählen

apt install \
      wine \
      wine32 \
      wine64 \........

Code: Alles auswählen

apt install 'wine wine32 wind64.....' 
?

mcb

Re: Verständnisfrage wofür steht \

Beitrag von mcb » 09.04.2021 20:21:18

Ne wohl doch nicht.

Code: Alles auswählen

 apt install -s 'firefox doas'
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done

fischig
Beiträge: 3600
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Verständnisfrage wofür steht \

Beitrag von fischig » 09.04.2021 20:54:48

Naja, mit dem Backslash kann man jedenfalls so tun als folge man mit Shell-Kommandos den Konventionen für „ordentliche“ Programmiersprachen. :wink:

Das hier durfte ich kürzlich Zeichen für Zeichen abschreiben, weil ich an der „neuen“ Maschine auf der Konsole mit dem Touchpad nicht klar kam:

Code: Alles auswählen

linux-image-$(uname -r|sed 's,[^-]*-[^-]*-,,') linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms

mcb

Re: Verständnisfrage wofür steht \

Beitrag von mcb » 09.04.2021 21:16:12

Merke ich mir das ganze mal als Zeilenumbruch (für Scripte) ...

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

Re: gelöst: wofür steht \

Beitrag von Meillo » 09.04.2021 22:30:35

Ein Zeilenumbruch beendet normalerweise die Befehlszeile (und der Befehl wird dann verarbeitet). Will man das verhindern, d.h. will man den Zeilenumbruch innerhalb der Befehlszeile haben, d.h. will man die Befehlszeile ueber den Zeilenumbruch hinaus fortsetzen, dann muss man diesen quoten. Das macht man mittels des Backslashes als letztes Zeilen vor dem Zeilenumbruch. Ein Backslash weist die Shell an, das folgende Zeichen nicht in der normalen Weise zu verarbeiten, sondern als literales Zeilen (d.h. ohne Sonderbedeutung) an der Stelle in die Befehlszeile einzubetten.

Genutzt wird der Backslash am Zeilenende normalerweise um eine bessere Lesbarkeit und Uebersichtlichkeit von langen Befehlen zu schaffen.
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: Verständnisfrage wofür steht \

Beitrag von hikaru » 09.04.2021 23:26:37

offtopic:
fischic hat geschrieben: ↑ zum Beitrag ↑
09.04.2021 20:54:48
Das hier durfte ich kürzlich Zeichen für Zeichen abschreiben, weil ich an der „neuen“ Maschine auf der Konsole mit dem Touchpad nicht klar kam:

Code: Alles auswählen

linux-image-$(uname -r|sed 's,[^-]*-[^-]*-,,') linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms
Was sed hier vom Release-Namen übrig lässt ist die Kernel-Architektur:

Code: Alles auswählen

$ echo $(uname -r|sed 's,[^-]*-[^-]*-,,')
amd64
Das hättest du auch einfach statt des Klammerausdrucks tippen können ;) :

Code: Alles auswählen

linux-image-amd64 linux-headers-amd64 broadcom-sta-dkms

fischig
Beiträge: 3600
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: gelöst: wofür steht \

Beitrag von fischig » 10.04.2021 09:40:03

Das solltest du vielleicht denen hier: https://wiki.debian.org/wl erzählen. Woher soll ich armer EDV-führerscheinloser User denn wissen, dass die Shell-Götter es gar nicht ernst meinen, wenn sie sowas verlautbaren? :P

Ich musste ein proprietäres Modul für die WLAN-Karte mit dkms bauen. Verstanden hatte ich das Konstrukt eh nicht. Und da man mir mitteiltte, dass ich das relevanteste/letzte Linux-Bild dazu benötigte, vermutete ich halt, dass das Konstrukt dafür sorgt, dass nun auch wirklich das installiert werden würde, unabhängig davon, ob ich es vielleicht schon auf der Maschine hatte. :wink: Und vielleicht lag ich da gar nicht so falsch, denn wenn ich deine „Übersetzung“ richtig lese, dann werden mit dem Kommando zwei Meta-Pakete für den Kern installiert, die auf das jeweils letzte reale Kern-Bild im Repo zeigen und dieses dann erforderlichenfalls ebenfalls installieren. Und diese Metapakete installiere ich in der Tat eigentlich nie, wenngleich meine minimale System-Installation sehr frisch war.

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: gelöst: wofür steht \

Beitrag von hikaru » 10.04.2021 12:00:35

Ja, da installierst du das Metapaket für den aktuellsten Kernel deiner Architektur in deinem Release. Wenn man anders als du den Standardkernel von Debian verwendet ist es eine gute Idee, das zu tun, denn über dieses Metapaket kommen Kernel-Sicherheitsupdates.
Die Kernel-Headers enthalten die Teile des Kernel-Quellcodes die nötig sind um Kernel-Module via dkms zu bauen.
Da du deine eigenen Kernel baust bräuchtest du eigentlich keines der Pakete. Du musst nur sicherstellen, dass apt die Quellen deines Eigenbaukernels an gewohnter Stelle findet.

Was mir außerdem auffällt:
https://wiki.debian.org/wl hat geschrieben:The driver depends on the x86 or x86-64 architecture (Debian i386 and AMD64 ports respectively).
Dieser dkms-Build funktioniert also nur für i386 und amd64, nicht aber für andere Architekturen.
Wenn dem so ist, dann könnte man zumindest das sed-Pattern vereinfachen, z.B. so:

Code: Alles auswählen

sed 's,.*-,,'
Der Unterschied ist, dass das Original den Teil hinter dem zweiten Minus übrig lässt, während meine Variante den Teil hinter dem letzten Minus übrig lässt.
Wenn der Kernel-Releasename genau zwei Minuszeichen enthält, dann kommt beides auf's Gleiche raus. Meine Annahme war gestern, dass hier aus historischen Gründen z.B. auch auf Architekturen Rücksicht genommen werden soll, deren Architektur selbst ein Minus enthält (z.B. kfreebsd-amd64). Da solche Architekturen aber offenbar eh nicht unterstützt werden, könnte man sich auch das kompizierte sed-Pattern sparen.

fischig
Beiträge: 3600
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: gelöst: wofür steht \

Beitrag von fischig » 10.04.2021 14:32:52

hikaru hat geschrieben:Wenn man anders als du den Standardkernel von Debian verwendet ...
Auf der Maschine bin ich doch noch in der Aufbauphase und da weiß ich einen stabilen Debian-Standard-Kern durchaus zu schätzen. :wink:

Wie dem auch sei! Danke für die weiterführenden Hinweise! Und Dank auch an die Wiki-Schreiber, die so tumben Mesnchen wie mir ein (naja, vielleicht nicht ganz :wink: ) mundgerechtes Kommando servieren, um eine Netzwerkkarte zum Laufen zu bekommen!

Ist Broadcom auch so 'ne linuxfeindliche Firma wie Nvidia, die man als Linuxer möglichst meiden sollte?
Upps, ich glaube jetzt kapern wir den Thread, kann ein Mod das vielleicht abtrennen und nach Smalltalk verschieben?

Antworten