Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[gelöst] Bash: Inhalt einer Variable als Befehl ausführen
#1
Hallo,

Script test.sh:

Code:
#!/bin/bash

befehl1="ifconfig"
"$befehl1"

befehl2="df -h"
"$befehl2"

befehl1 wird ausgeführt, befehl2 (bzw. alle Befehle mit Leerzeichen) nicht. Was mach ich falsch?


Gruß
Steevee
VDR-Server: EasyVDR 2.0, TBS 6984, Asus P8H61-M LE, Intel Celeron G540, GT520
VDR-TFT: EasyVDR 2.0, Skystar HD2, Asus M2N-VM HDMI, AMD Athlon 4850e, GT520, Touch-TFT, Atric
VDR-SZ: EasyVDR 2.0, Cine S2 v6.0, Asus M4N78 Pro, AMD Athlon II X2 250, Atric
VDR-Susi: EasyVDR 1.0, TT S2-6400, Atric
VDR-Gabi: EasyVDR 2.0, Cine S2 v5.5, MB Asus, GT520, Atric
sonstige VDR Test-Hardware: Terratec Cinergy 1200 DVB-C, DVB-S2 TeVii S464, div. DVB-S FF, div. DVB-S Budget, IMON-LCD, Fritz-Box, Raspberry PI, USB-IR, div. ser. IR, ...
Zitieren
#2
Hi

Erklären kann ich es auch nicht, ich habe den Syntax bis heute noch nicht zu 100% verstanden, aber so gehts:

Code:
befehl2="df -h"
$befehl2
Produktiv-VDR:
Board GA H77-DS3H, Intel Intel® Core™ i5-3470, Cine S2 DVB, WD 3TB Green, WDC WD20EARS-00J  2TB, Geforce 750Ti oder Intel HD
Easyvdr 3.0
Zitieren
#3
Ok. Im Test funktioniert das, aber nicht im "wahren Leben".

// Müll gelöscht

Gruß
Steevee
VDR-Server: EasyVDR 2.0, TBS 6984, Asus P8H61-M LE, Intel Celeron G540, GT520
VDR-TFT: EasyVDR 2.0, Skystar HD2, Asus M2N-VM HDMI, AMD Athlon 4850e, GT520, Touch-TFT, Atric
VDR-SZ: EasyVDR 2.0, Cine S2 v6.0, Asus M4N78 Pro, AMD Athlon II X2 250, Atric
VDR-Susi: EasyVDR 1.0, TT S2-6400, Atric
VDR-Gabi: EasyVDR 2.0, Cine S2 v5.5, MB Asus, GT520, Atric
sonstige VDR Test-Hardware: Terratec Cinergy 1200 DVB-C, DVB-S2 TeVii S464, div. DVB-S FF, div. DVB-S Budget, IMON-LCD, Fritz-Box, Raspberry PI, USB-IR, div. ser. IR, ...
Zitieren
#4
Ich hoffe, das hier hilft euch:

Code:
[[email protected] ~]# vi ddd.sh
[[email protected] ~]# ./ddd.sh
+ befehl1=/usr/sbin/ifconfig
+ argsbefehl1=p4p1
+ /usr/sbin/ifconfig p4p1
p4p1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 3c:97:0e:1f:46:b1  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

+ befehl2=df
+ argsbefehl2=-h
+ df -h
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/dm-0       288G    273G   69M  100% /
devtmpfs        2,7G       0  2,7G    0% /dev
tmpfs           2,7G    944K  2,7G    1% /dev/shm
tmpfs           2,7G    8,9M  2,7G    1% /run
tmpfs           2,7G       0  2,7G    0% /sys/fs/cgroup
tmpfs           2,7G    4,7M  2,7G    1% /tmp
/dev/sda5      1008M    439M  518M   46% /boot
[[email protected] ~]# cat ddd.sh
#!/bin/bash
set -x
befehl1="/usr/sbin/ifconfig"
argsbefehl1="p4p1"
${befehl1} ${argsbefehl1}

befehl2="df"
argsbefehl2="-h"
${befehl2} ${argsbefehl2}
[[email protected] ~]#

Die Story ist, dass der Befehl "df" ist und das Argument "-h". Es ist nicht der Befehl "df -h" (da der Befehl df\ \-h rein zufällig nicht existiert....

Das "$befehl" finde ich ziemlich doof - bei ${befehl} wäre mir klar, dass der Befehl vorher ausgewertet wird.. Bei "$befehl" musste ich jezz wirklich denken.

Muss jezz Kinder bespassen, vielleicht habe ich gleich noch einmal Zeit, dann kann ich mir den array einmal ansehen.

Tuessi
Mostly Harmless: Grotendeels ongevaarlijk

EasyVDR1: Mainboard Asus P8Z77-V (oder ähnlich), NVidia GK208 bzw. GT 630 Rev. 2 passiv, DVB: WinTV Nova HD S2, Technisat SkyStar2 (nur DVB-S), USB-Bootstick/ext4 ohne Journal für VDR, Mediaplatte WDC WD40EFRX, FB One-for-All URC 1280 mit Code 1272 als MS-MCE für SAT (via WinTV Nova HD S2) - Prod auf EA3.5, Test auf EA5
EasyVDR2: Mainboard MSI Z370M-GAMING-PRO-AC, NVidia GK208 bzw. GT 630 Rev. 2 passiv, DVB: Digital Devices Octopus Cine C2T2S2 , SSD-Bootplatte mit EasyVDR5 Focal, EasyVDR4 Focal,... , VNSI gegen EasyVDR1, keine FB, Tastatur Funk Logitech und "Microdia RF Controller" via HID - Test auf EA5 - (Netflix, Youtube...)
Zitieren
#5
anstatt
Code:
${array[0]} >> "$logdatei"

dies
Code:
befehl=${array[0]}
(${befehl[@]} >> $logdatei)

und dann gehts. hab ich jetzt rausbekommen. ist kompliziert, diese Syntax...

// naja ich merk nicht so 100%.... nochmal schaun...
VDR-Server: EasyVDR 2.0, TBS 6984, Asus P8H61-M LE, Intel Celeron G540, GT520
VDR-TFT: EasyVDR 2.0, Skystar HD2, Asus M2N-VM HDMI, AMD Athlon 4850e, GT520, Touch-TFT, Atric
VDR-SZ: EasyVDR 2.0, Cine S2 v6.0, Asus M4N78 Pro, AMD Athlon II X2 250, Atric
VDR-Susi: EasyVDR 1.0, TT S2-6400, Atric
VDR-Gabi: EasyVDR 2.0, Cine S2 v5.5, MB Asus, GT520, Atric
sonstige VDR Test-Hardware: Terratec Cinergy 1200 DVB-C, DVB-S2 TeVii S464, div. DVB-S FF, div. DVB-S Budget, IMON-LCD, Fritz-Box, Raspberry PI, USB-IR, div. ser. IR, ...
Zitieren
#6
Hallo,

also dass funktioniert schonmal:

Code:
logdatei="/var/www/log/test.txt"
array[1]="cat /var/lib/vdr/sysconfig"

befehl=${array[1]}
(${befehl[@]} >> $logdatei)

wenn aber mehrere Befehle drinvorkommen wie z.B. "cat /var/lib/vdr/sysconfig | grep LAN":

Code:
logdatei="/var/www/log/test.txt"
array[3]="cat /var/lib/vdr/sysconfig | grep LAN"

befehl=${array[1]}
(${befehl[@]} >> $logdatei)

funktioniert das nicht mehr. Wie drösel ich das denn auf?

Gruß
Steevee
VDR-Server: EasyVDR 2.0, TBS 6984, Asus P8H61-M LE, Intel Celeron G540, GT520
VDR-TFT: EasyVDR 2.0, Skystar HD2, Asus M2N-VM HDMI, AMD Athlon 4850e, GT520, Touch-TFT, Atric
VDR-SZ: EasyVDR 2.0, Cine S2 v6.0, Asus M4N78 Pro, AMD Athlon II X2 250, Atric
VDR-Susi: EasyVDR 1.0, TT S2-6400, Atric
VDR-Gabi: EasyVDR 2.0, Cine S2 v5.5, MB Asus, GT520, Atric
sonstige VDR Test-Hardware: Terratec Cinergy 1200 DVB-C, DVB-S2 TeVii S464, div. DVB-S FF, div. DVB-S Budget, IMON-LCD, Fritz-Box, Raspberry PI, USB-IR, div. ser. IR, ...
Zitieren
#7
Das ist die Lösung:

Code:
eval ${array[0]} >> $logdatei
VDR-Server: EasyVDR 2.0, TBS 6984, Asus P8H61-M LE, Intel Celeron G540, GT520
VDR-TFT: EasyVDR 2.0, Skystar HD2, Asus M2N-VM HDMI, AMD Athlon 4850e, GT520, Touch-TFT, Atric
VDR-SZ: EasyVDR 2.0, Cine S2 v6.0, Asus M4N78 Pro, AMD Athlon II X2 250, Atric
VDR-Susi: EasyVDR 1.0, TT S2-6400, Atric
VDR-Gabi: EasyVDR 2.0, Cine S2 v5.5, MB Asus, GT520, Atric
sonstige VDR Test-Hardware: Terratec Cinergy 1200 DVB-C, DVB-S2 TeVii S464, div. DVB-S FF, div. DVB-S Budget, IMON-LCD, Fritz-Box, Raspberry PI, USB-IR, div. ser. IR, ...
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste