Bash / Shell script Probleme beim Programmieren

DRMCW

Cadet 3rd Year
Registriert
Nov. 2009
Beiträge
63
Moin Leute,

ich habe ein problem beim Coden, und komme nicht weiter.

Ich soll laut Aufgabenstellung ein Datei löschen: Dabei soll diese aber nicht richig gelöschen werden sondern nur in einen andern Ordner kopieren und dessen Namen wie auch der Ordner namen geändert werden.

Den Papierkorb habe ich schon erstellt /home/me/papierkorb/


Dabei sollen wir den Namen ändern in bspw -> Date_Processid.dat
also Datum und ProcessID

und den Ordner in -> .dir Date_Processid_dat path
.dir Dateinamne & Path <- der herkunft.

Das ändern der der Dateinamen ist nicht das Problem, und das Kopieren in ein anderen Ordner auch nicht.

Ich habe probleme den Ornder mit dem angegeben Namen im Papierkorb zu erstellen.

ich speicher mir erstmal den oderner wo die Datei ihren ursprung hat.



ordner= $(pwd)
fileName= Date_Processid.dat

und dann wollte ich im Papierkorb

mkdir /home/me/papierkorb/".dir""\ "$(fileName)""\ ""$ordner"

dann komt die fehlermeldung das Date_Processid.dat kein verzeichniss ist.

Das ist mir auch klar, es soll ja nur der name sein und kein Extra ordner erstellt werden.

Wie bekomme ich das hin den Ornder so umzubenennen?

.dir klappt aber die andere sachen nicht wie \ "$(fileName)""\ ""$ordner"
 
probier' mal $fileName statt $(fileName)
 
Du erstellst mit $() eine Subshell, deine Variable heißt $fileName.
 
  • Gefällt mir
Reaktionen: BoeserBrot
Zumindest in Bash kannst du ${VARNAME} benutzen. Hat ein paar Vorteile im Kontext von Leerzeichen und so, soweit ich das weiß.
 
  • Gefällt mir
Reaktionen: eigsi124
okay, ich kann den Ordner namen nicht ändern. es kommt jetzt

nur .dir raus

$ordner
Datei oder Verzeichnis nicht gefunden
Ergänzung ()

mkdir: das Verzeichnis /home/me/.trashBin/.dir 201109135426_5068.dat /home/me/Schreibtisch

kann nicht angelegt werden: Datei oder Verzeichnis nicht gefunden
 
Da sind Leerzeichen drin, deswegen gehts nicht.
 
Gibt es den irgendeine manipulation diese hinzubekommen?

ich meine man kann ja Ordern so mit leerzeichen erstellen. Das Problem ist ich habe jetzt mal den $ordner weg genommen und schon wird der Ordner erstellt.
Er hat also ein problem mit dem $ordner das er halt /home/me/Schreibtisch nicht klar kommt.
 
Bitte nutz Code-Tags, so kann das kaum einer entziffern. Weiterhin, wenn du nicht weiß was falsch läuft, setz einfach ein echo vor den Befehl, dann siehst du ja was er macht. Alternativ gibts auch set -x zum Tracen. Nutz außerdem einen Editor mit Syntax Highlighting, dann siehst du an deinem Befehl sofort, was falsch ist.

1604927418304.png


Zum Scripting empfiehlt sich auch Shellcheck.

Und wie gesagt: du benötigst keine Subshell.
 
  • Gefällt mir
Reaktionen: BeBur
DRMCW schrieb:
ich meine man kann ja Ordern so mit leerzeichen erstellen.
Man sollte unbedingt in Linux und Unix Dateien und Verzeichnisse mit Leerzeichen vermeiden. Es schafft nur Probleme. Der ganze Leerzeichenunsinn kommt eigentlich nur, wenn man über Netzlaufwerke und Shares von Windowssystemen über NFS, SMB Dateien bekommt.
 
PHuV schrieb:
Man sollte unbedingt in Linux und Unix Dateien und Verzeichnisse mit Leerzeichen vermeiden. Es schafft nur Probleme. Der ganze Leerzeichenunsinn kommt eigentlich nur, wenn man über Netzlaufwerke und Shares von Windowssystemen über NFS, SMB Dateien bekommt.
Das höre ich zum ersten mal. Ich kann da keinen Grund für erkennen, zumal Bash an etlichen Stellen 'anstrengend' ist. Ist auch im Jahr 2020 nicht mehr wirklich zeitgemäß auf Leerzeichen zu verzichten.
 
Das war schon immer so. Es kommt dann immer wieder vor, daß es hackeligkeiten andere Komponenten und Programmen gibt.
Ich sag nur mal Gruppenname und Domain für Datei und Verzeichnisberechtigungen über Active Directory.
Ende vom Lied war, es wurden Gruppe und Domain ohne Leerzeichen angelegt. ;) Weiter gehts mit Proxy Konfiguration über "Domain Name"\user:"pw mit Sonderzeichen"@url in einem Tomcat mit setenv.sh und Variablen für den Java Aufruf. Das bekommst Du ebenso nicht mehr abgehandelt. Da hast Du dann Konstrukte wie
Code:
export JAVA_OPTS="$JAVA_OPTS -Xmx4096m -Dfile.encoding=UTF-8 -Dhttp.proxySet=true -Dhttps.proxyHost=\"\\\\Domain user\user:\12asdf293#ß\\\"@webproxy -Dhttps.proxyPort=8080 -Dhttp.nonProxyHosts=\"localhost|anwendungserver|sapserver|dbserver\" "
Unabhängig, daß es nicht funktioniert, hast Du eben das Problem, daß Sonderzeichen wie -/\&| eben Bedeutungen für die Konsolen haben, und wenn sowas in den Kennwörtern auftauchen, Leerzeichen in Namen, und jeder Prozess Zeichen weginterpretiert, das so nicht sauber beim letzten Aufruf auftaucht, und dann der Prozess nicht starten kann.

Daher, Finger weg von solchem Unsinn. Es schafft viele Probleme, immer wieder und irgendwo, wo man es nicht vermutet. Diese Probleme tauchen fast immer bei Übergängen Windows zu Unix und umgekehrt auf.
 
Zuletzt bearbeitet:
Früher war das mal so. Dem Admin würd ich heute was husten der mir Leerzeichen in Ordnern verbietet weil "Technik". Linux hat mir schon andere non-printable zeichen (newline) aus PDFs in einen Dateinamen reinkopiert, da hatte ich zumindest teilweises Verständnis dass das Probleme gab, aber Leerzeichen? Nope.
 
Mag ja sein, daß Du was husten würdest, nützt aber nichts, wenn Deine CSV und Excel-Dateien nicht mehr gescheit weiterverarbeitet werden können. Ich mach ja schon seit Jahrzehnten DI und ESB und sonstwas, und es gilt immer die Regel: Weiterverarbeitenden Dateien incl. Ordner ins Unix/Linux: KEINE Leerzeichen! Das macht die Massendatenverarbeitung sehr wohl um vieles einfacher und besser, auch unter Windows.
 
Dagegen lässt sich nichts einwenden.
Für privat und fürs lernen von scripting sollte man jedenfalls nicht danach gehen, weder muss man privat leerzeichen unter Linux vermeiden, noch sollte man scripte unnötig so schreiben, dass sie nur funktionieren, wenn keine leerzeichen vorkommen.
 
BeBur schrieb:
noch sollte man scripte unnötig so schreiben, dass sie nur funktionieren, wenn keine leerzeichen vorkommen.
Wobei das Problem eher umgekehrt ist. Nämlich das bei Skripten zu oft vergessen wird, das Dateinamen Leerzeichen haben können und es dann schief geht, wenns dann doch mal vorkommt.
 
  • Gefällt mir
Reaktionen: PHuV und BeBur
Ich habs mir eben privat auch angewöhnt, siehe umfangreiche Bilder, MP3 und Dokumentensammlung, auf Leerzeichen zu verzichten. Da funktionieren meine privat geschriebenen Scripte per Bash und Cygwin Tools auch prima.
 
Zurück
Oben