Standardmäßig $ PWD meines Shell-Bash-Skripts in den aktuellen Speicherort des Skripts ändern

800
Purpe_Fedora

Hey, ich führe mein Shell-Skript aus, das mit Ordnern und Dateien interagiert, aber mein $ PWD, das immer auf das Verzeichnis / home / MyUserName verweist, und dies führt zu einer Verschlechterung dessen, was es tun soll. Ich verwende Linux 4.4.8-300.fc23.x86_64 GNU / Linux:

#!/usr/bin/bash -x  clear ls $PWD  #Check Root echo checking Root user if [ $EUID -ne 0 ] then sudo su fi;  #Check internet availablity TEST=$(ping -c 1 74.125.21.14|wc -l) if [ $TEST -gt 5 2>&1 ] then sudo dnf install gcc kernel-devel binutils cpp glibc-devel glibc-headers isl kernel kernel-headers libmpc else echo "No Internet Connection Available! Installing RPMs manuely." arr=(*.rpm) for (( i=0; i<${#arr[@]}; i++ )); do echo " $ " dnf -y install $ done fi;  # Get Network Ability  echo "Starting the setup of your laptop's wireless card." if [ -d ./MyWirelessCard ] then FILE=./MyWirelessCard/fedora23_broadcom_wl_install.sh uname1=" $( stat -c "%u" $FILE ) " [ " $USERNAME1 = 1000" ] || chown 1000 $FILE [ " -r -w -x $FILE " ] || chmod +rwx $FILE else mkdir ./MyWirelessCard FILE=./MyWirelessCard/fedora23_broadcom_wl_install.sh uname1=" $( stat -c "%u" $FILE ) " [ " $USERNAME1 = 1000" ] || chown 1000 $FILE [ " -r -w -x $FILE " ] || chmod +rwx $FILE fi;  #Making wireless card installer run on boot #echo "Making the wireless card install script run on boot" #ln -s ./MyWirelessCard/fedora23_broadcom_wl_update.sh /etc/init.d/ #ln -s ./MyWirelessCard/fedora23_broadcom_wl_update.sh /etc/rc.d/  # Initial Update  echo "Preforming initial system update." dnf -y update  #Exit  echo Script is finished exit 

Ich bekomme:

  • ls / home / MyUserName Inhalt des Ordners
  • Echo-Prüfung Stammbenutzer Prüfung Stammbenutzer
  • '[' 1000 -ne 0 ']'
  • sudo su [sudo] kennwort für myUserName: ++ ping -c 1 74.125.21.14 ++ wc -l
  • TEST = 6
  • '[' 6 -gt 5 ']'
  • sudo dnf install gcc kernel-devel binutils cpp glibc-devel glibc-headers isl kernel-kernel-headers libmpc [sudo] kennwort für dcarr:
  • echo 'Die Einrichtung der WLAN-Karte Ihres Laptops wird gestartet.' Starten der Einrichtung der WLAN-Karte Ihres Laptops.
  • '[' -d ./MyWirelessCard ']'
  • mkdir ./MyWirelessCard
  • FILE =. / MyWirelessCard / fedora23_broadcom_wl_install.sh ++ stat -c% u ./MyWirelessCard/fedora23_broadcom_wl_install.sh stat: Keine Stat './MyWirelessCard/fedora23_broadcom_wl_install.sh': Keine solche Datei oder kein Verzeichnis
  • uname1 = ''
  • '[' '= 1000' ']'
  • '[' '-r -w -x ./MyWirelessCard/fedora23_broadcom_wl_install.sh' ']'
  • echo 'Vor dem ersten Systemupdate vorbereiten.' Erste Aktualisierung des Systems durchführen.
  • dnf -y update Fehler: Dieser Befehl muss unter dem Root-Benutzer ausgeführt werden.
  • echo Skript ist fertig Skript ist fertig
  • Ausfahrt

Ich bin ratlos, jede Hilfe wäre sehr dankbar.

1
Wenn mir nicht etwas fehlt, ist das Sudo su zwecklos. Es ist wahrscheinlich ohnehin keine gute Praxis, es reicht aus, sich darüber zu beschweren, dass sie nicht als root und exit ausgeführt wird. / edit: Ah, Sie setzen auf die Zwischenspeicherung der Authentifizierung. Das ist noch schlimmer. : D Daniel B vor 8 Jahren 0
[Verwandte Lektüre] (http://stackoverflow.com/q/59895/1025421) Daniel B vor 8 Jahren 0
Ihr Zitat ist an vielen Stellen falsch. Zum Beispiel muss [[-r -w -x $ FILE]] `[-r" $ FILE "] && [-w" $ FILE "] sein & & [-x" $ FILE "] - - Code wird niemals "falsch" sein glenn jackman vor 8 Jahren 0
Wenn Sie dieses Verzeichnis erstellen müssen, existiert die $ FILE sicherlich nicht. glenn jackman vor 8 Jahren 0
Interessant, aber gerade aus Neugier, was ist der Unterschied? Für mich ist es ein Job, zumindest soweit ich weiß Purpe_Fedora vor 8 Jahren 0

1 Antwort auf die Frage

3
glenn jackman

Sie müssten tatsächlich Verzeichnisse in Ihrem Skript ändern. Typisch:

cd "$(dirname "$0")" 
Ich habe irgendwo gelesen, dass Sie das nicht verwenden können, wenn es die Datei enthält, oder handelt es sich um einen anderen Befehl? Purpe_Fedora vor 8 Jahren 0
Ich verstehe deine Frage nicht. glenn jackman vor 8 Jahren 2
Wenn ich $ PWD verwende, wird mein Benutzerordner angezeigt, nicht der Skriptordner. Purpe_Fedora vor 8 Jahren 0
Der Skriptordner lautet `dirname" $ ​​0 "`. Nachdem Sie dort cd gespeichert haben, hat $ PWD den gewünschten Wert. glenn jackman vor 8 Jahren 0
Danke, es hat ein bisschen gedauert, bis ich die Peices zusammengefügt habe, und die damit verbundene Lektüre hat dazu beigetragen, dass die letzten verbleibenden Haare noch übrig geblieben sind! :) Purpe_Fedora vor 8 Jahren 0