Hi, da mir mit dem rm (ja, man soll vorsichtig damit sein, wirklich vorsichtig...) ein kleines Missgeschickt unterlaufen ist, hab ich mir gedacht - den erstetzte doch durch ein mv-Script. Jetzt hab ich von Scripting nicht die Welt an Ahnung. Meine Frage wäre: Wie übergebe ich ein Argument von einem Befehl an einen anderen? Konkret: Wenn ich rm file.xyz mache (oder rm *.xyz), wie übergebe ich das meinem mv? Danke Philipp PS: Nicht dass man mir nachsagt, ich predige immer mit Google zu suchen und tu es selbst nicht: Ich hab Google angeschmissen und ich hab mir ein paar andere Shellscripten angeguckt. Aber bei den meisten Scripten blick ich auf Anhieb nicht so recht durch und Google bringt mir so viele Ergebnisse, dass ich in mich übermorgen noch durch Seiten wühlen könnte (trotz ziemlicher Eingrenzung noch 575 Seiten mit 'ner Menge Overhead). -- registered Linux user number 258854
Hallo, * Am 03.04.2002 postete Philipp Zacharias:
Hi,
da mir mit dem rm (ja, man soll vorsichtig damit sein, wirklich vorsichtig...) ein kleines Missgeschickt unterlaufen ist, hab ich mir gedacht - den erstetzte doch durch ein mv-Script. Jetzt hab ich von Scripting nicht die Welt an Ahnung. Meine Frage wäre: Wie übergebe ich ein Argument von einem Befehl an einen anderen?
Was willst Du denn von rm nach mv übergeben? Ich habe keine Ahnung, was Du genau machen willst. Mir scheint Du wolltest den Befehl "remove" (rm) durch "move" (mv) ersetzen.
Konkret: Wenn ich rm file.xyz mache (oder rm *.xyz), wie übergebe ich das meinem mv?
Wenn Du ein rm file.xyz machst, dann ist nichts mehr zum Übergeben da. Löschen ist löschen. Du kannst es auch liquidieren nennen.
PS: Nicht dass man mir nachsagt, ich predige immer mit Google zu suchen und tu es selbst nicht: Ich hab Google angeschmissen und ich hab mir ein paar andere Shellscripten angeguckt. Aber bei den meisten Scripten blick ich auf Anhieb nicht so recht durch und Google bringt mir so viele Ergebnisse, dass ich in mich übermorgen noch durch Seiten wühlen könnte (trotz ziemlicher Eingrenzung noch 575 Seiten mit 'ner Menge Overhead).
Manuals ankucken? Da steht meistens die richitge Syntax drin. Sag doch mal, was Du machen willst. So richitig konkret. Ich will Datei A ... -- Gruß Alex -- Dies ist eine "Ghostsignatur" und von 12:00 Pm bis 1:00 am gültig. [WoKo in dag°]
Hi Alex, Am Donnerstag, 4. April 2002 00:01 schrieb Alex Klein: [...]
Manuals ankucken? Da steht meistens die richitge Syntax drin.
Es ging nicht um die Syntax von Befehlen (da hab ich keine Probleme mit und auch nicht mit manuals), sondern um Shell-Scripting und übergabe von Dateinamen.
Sag doch mal, was Du machen willst. So richitig konkret. Ich will Datei A ...
siehe meine Antwort auf Posting von Bernd Brodesser. Gruß Philipp -- registered Linux user number 258854
Philipp Zacharias
Es ging nicht um die Syntax von Befehlen (da hab ich keine Probleme mit und auch nicht mit manuals), sondern um Shell-Scripting und übergabe von Dateinamen.
Dann schau Dir einmal www.linuxdoc.org an. Dort findet sich das Linux Documentation Project! Dort findest Du eine Advanced Bash Scripting Guide! Mit den besten Grüßen, Konrad Neitzel -- SoftMediaTec GmbH Tel: 0172 / 689 31 45 Fax: 069 / 90 50 99 53
* Philipp Zacharias schrieb am 03.Apr.2002:
da mir mit dem rm (ja, man soll vorsichtig damit sein, wirklich vorsichtig...) ein kleines Missgeschickt unterlaufen ist, hab ich mir gedacht - den erstetzte doch durch ein mv-Script.
Würd ich nicht machen.
Jetzt hab ich von Scripting nicht die Welt an Ahnung. Meine Frage wäre: Wie übergebe ich ein Argument von einem Befehl an einen anderen? Konkret: Wenn ich rm file.xyz mache (oder rm *.xyz), wie übergebe ich das meinem mv?
Es gibt die Positionsvariablen. Das sind $1, $2, $3 usw. Das erste Argument liegt in $1, das zweite in $2 usw. In $# steht die Anzahl der Argumente. Mit shift shiftest Du die Positionsvariable eins durch, daß heißt, aus $2 wird $1, aus $3 wird $2 usw. $1 geht verloren. Und dann gibt es noch $*, $@, "$*" und "$@" Darin stehen alle Argumente. Und zwar folgendermaßen: Angenommen, Du hast die Argumente "Arg1" "zwei Worte" "Arg3" so steht in $* = $@ "Arg1" "zwei" "Worte" "Arg3" "$*" "Arg1 zwei Worte Arg3" "$@" "Arg1" "zwei Worte" "Arg3" "$@" ist somit das, was Du suchst. Habe ich übrigens ein wenig schlampig geschrieben. ".." ist die Übliche Variablenkapselung. $* und "$*" verhalten sich ganz normal wie alle anderen Variablen auch. "$@" ist eine Besonderheit. Übrigens steht in $0 der Befehl selber, so kanst Du ein skript verschieden ausführen, je nachdem wie es heißt. So hat z.B vi je nach Namen verschiedene Eigenschaften. Ok, ist ein Programm, aber mit einem Skript wäre das auch möglich. Mußt nur über $0 abfragen, wie das Skript heißt. Dann brauchst Du nur noch links für die verschiedene Namen. Bernd -- Alle meine Signaturen sind rein zufällig und haben nichts mit dem Text oder dem Schreiber zu tun, dem ich antworte. Falls irgendwelche Unrichtigkeiten dabei sein sollten, so bedauere ich das. Es wäre nett, wenn Du mich benachrichtigen würdest. |Zufallssignatur 0
Am Donnerstag, 4. April 2002 06:36 schrieb Bernd Brodesser:
* Philipp Zacharias schrieb am 03.Apr.2002:
da mir mit dem rm (ja, man soll vorsichtig damit sein, wirklich vorsichtig...) ein kleines Missgeschickt unterlaufen ist, hab ich mir gedacht - den erstetzte doch durch ein mv-Script.
Würd ich nicht machen.
why not? works hervorragend.
Jetzt hab ich von Scripting nicht die Welt an Ahnung. Meine Frage wäre: Wie übergebe ich ein Argument von einem Befehl an einen anderen? Konkret: Wenn ich rm file.xyz mache (oder rm *.xyz), wie übergebe ich das meinem mv?
Es gibt die Positionsvariablen. Das sind $1, $2, $3 usw. Das erste Argument liegt in $1, das zweite in $2 usw. In $# steht die Anzahl der Argumente. Mit shift shiftest Du die Positionsvariable eins durch, daß heißt, aus $2 wird $1, aus $3 wird $2 usw. $1 geht verloren.
Und dann gibt es noch $*, $@, "$*" und "$@" Darin stehen alle Argumente. Und zwar folgendermaßen:
Angenommen, Du hast die Argumente "Arg1" "zwei Worte" "Arg3"
so steht in
$* = $@ "Arg1" "zwei" "Worte" "Arg3"
"$*" "Arg1 zwei Worte Arg3"
"$@" "Arg1" "zwei Worte" "Arg3"
"$@" ist somit das, was Du suchst. Habe ich übrigens ein wenig schlampig geschrieben. ".." ist die Übliche Variablenkapselung. $* und "$*" verhalten sich ganz normal wie alle anderen Variablen auch. "$@" ist eine Besonderheit.
$* hab ich jetzt als Lösung genommen und mein Skript schaut so aus: mv $* ~/KDesktop/Trash Womit folglich alle mittels rm von mir gelöschten Files erst mal im Mülleimer landen. Gruß Philipp -- registered Linux user number 258854
* Philipp Zacharias schrieb am 04.Apr.2002:
Am Donnerstag, 4. April 2002 06:36 schrieb Bernd Brodesser:
* Philipp Zacharias schrieb am 03.Apr.2002:
da mir mit dem rm (ja, man soll vorsichtig damit sein, wirklich vorsichtig...) ein kleines Missgeschickt unterlaufen ist, hab ich mir gedacht - den erstetzte doch durch ein mv-Script.
Würd ich nicht machen.
why not? works hervorragend.
Jetzt hab ich von Scripting nicht die Welt an Ahnung. Meine Frage wäre: Wie übergebe ich ein Argument von einem Befehl an einen anderen? Konkret: Wenn ich rm file.xyz mache (oder rm *.xyz), wie übergebe ich das meinem mv?
Es gibt die Positionsvariablen. Das sind $1, $2, $3 usw. Das erste Argument liegt in $1, das zweite in $2 usw. In $# steht die Anzahl der Argumente. Mit shift shiftest Du die Positionsvariable eins durch, daß heißt, aus $2 wird $1, aus $3 wird $2 usw. $1 geht verloren.
Und dann gibt es noch $*, $@, "$*" und "$@" Darin stehen alle Argumente. Und zwar folgendermaßen:
Angenommen, Du hast die Argumente "Arg1" "zwei Worte" "Arg3"
so steht in
$* = $@ "Arg1" "zwei" "Worte" "Arg3"
"$*" "Arg1 zwei Worte Arg3"
"$@" "Arg1" "zwei Worte" "Arg3"
"$@" ist somit das, was Du suchst. Habe ich übrigens ein wenig schlampig geschrieben. ".." ist die Übliche Variablenkapselung. $* und "$*" verhalten sich ganz normal wie alle anderen Variablen auch. "$@" ist eine Besonderheit.
$* hab ich jetzt als Lösung genommen und mein Skript schaut so aus:
mv $* ~/KDesktop/Trash
Womit folglich alle mittels rm von mir gelöschten Files erst mal im Mülleimer landen.
Womit Du dann Schwirigkeiten bekommst, wenn ein Dateiname ein Leerzeichen enthält. Warum das so ist, steht noch oben. Bernd -- ROTFL = Rolling On The Floor, Laughing = Auf dem Boden wälzen, lachend. SCNR = Sorry, Could Not Resist = Sorry, Ich konte nicht wiederstehen. AFAIK = As Far As I Know = So weit ich weis|BTW = By The Way = Nebenbei bemerkt IMHO = In My Humble Opinion = meiner bescheidenen Meinung nach |Zufallssig. 9
Hallo_{Bernd,Philipp,*}, * Am 04.04.2002 um 13:00 Uhr schrieb Bernd Brodesser:
* Philipp Zacharias schrieb am 04.Apr.2002:
Am Donnerstag, 4. April 2002 06:36 schrieb Bernd Brodesser:
* Philipp Zacharias schrieb am 03.Apr.2002:
da mir mit dem rm (ja, man soll vorsichtig damit sein, wirklich vorsichtig...) ein kleines Missgeschickt unterlaufen ist, hab ich mir gedacht - den erstetzte doch durch ein mv-Script.
Würd ich nicht machen.
why not? works hervorragend.
solange Du im Hinterkopf behältst das es sich beim <rm> um ein angepasstes Script handelt, ist alles ok. Sobald Du aber an einer anderen Maschine sitzt, bzw. Dein System mal komplett neu aufsetzt und diesen Workaround nicht nachziehst, wirst Du schon merken warum man sowas nicht machen sollte ;-) Gib dem <rm> keine neue Semantik, sondern gönne Dir hierfür einen eigenen Namen.
mv $* ~/KDesktop/Trash
Womit folglich alle mittels rm von mir gelöschten Files erst mal im Mülleimer landen.
Womit Du dann Schwirigkeiten bekommst, wenn ein Dateiname ein Leerzeichen enthält. Warum das so ist, steht noch oben.
Auch ein Löschen von namensgleichen Dateien geht in die Hose ;-) $> cd ~/public $> rm index.htm $> cd ebooks $> rm index.htm Unter ~/KDesktop/Trash befindet sich nur noch ~/public/ebooks/index.htm, ~/public/index.htm wurde überschrieben. -Jürgen -- Hast Du Zweifel, lass es ueberzeugend klingen. / Registered Linux-User #130804 http://counter.li.org \ \ Linux Stammtisch Bremerhaven http://linux.hs-bremerhaven.de /
Philipp Zacharias schrieb am Wed, 3 Apr 2002 23:39:26 +0200: rm durch mv-Script ersetzen
Hi,
da mir mit dem rm (ja, man soll vorsichtig damit sein, wirklich vorsichtig...) ein kleines Missgeschickt unterlaufen ist, hab ich mir gedacht - den erstetzte doch durch ein mv-Script. Jetzt hab ich von Scripting nicht die Welt an Ahnung. Meine Frage wäre: Wie übergebe ich ein Argument von einem Befehl an einen anderen? Konkret: Wenn ich rm file.xyz mache (oder rm *.xyz), wie übergebe ich das meinem mv?
Danke Philipp
Indem Du ein Alias anlegst ? 1. Du schreibst Dir ein kleines script rm_mv mit nur einem Kommando: #!/bin/bash mv "$*" /muelleimer/$USER machst das ausführbar und erreichbar für die user, die es brauchen, 2. legst passende Verzeichnisse für die User an 3. definierst ein Alias (ich gehe mal von der bash aus): alias rm=rm_mv dann wird in allen interaktiven Kommandoaufrufen anstelle von rm Dein skript rm_mv verwendet. Du mußt ggf. dafür sorgen, daß der Alias zum Start Deiner shell angelegt wird: trags in die ~/.profile oder so ein. -- may the tux be with You! Joerg Thuemmler sysadmin@vordruckleitverlag.de Vordruck Leitverlag GmbH Berlin, ZNL Freiberg Halsbruecker Str. 31b, 09599 Freiberg, Germany Tel. +49 (0)3731/303121
* Joerg Thuemmler schrieb am 04.Apr.2002:
Indem Du ein Alias anlegst ?
1. Du schreibst Dir ein kleines script rm_mv mit nur einem Kommando: #!/bin/bash mv "$*" /muelleimer/$USER machst das ausführbar und erreichbar für die user, die es brauchen, 2. legst passende Verzeichnisse für die User an 3. definierst ein Alias (ich gehe mal von der bash aus): alias rm=rm_mv
Warum so kompliziert? Du kannst es doch gleich rm nennen und in ~/bin bzw. /usr/local/bin setzen und dafür sorgen, daß ~/bin bzw. /usr/local/bin vor /bin im Pfad steht. Das tut es bei SuSE aber schon so wie so. Rate mal warum! Bernd
B.Brodesser@t-online.de (Bernd Brodesser) schrieb:
Warum so kompliziert? Du kannst es doch gleich rm nennen und in ~/bin bzw. /usr/local/bin setzen und dafür sorgen, daß ~/bin bzw. /usr/local/bin vor /bin im Pfad steht. Das tut es bei SuSE aber schon so wie so. Rate mal warum!
Warum so kompliziert? Man braucht das doch nicht in einem seperaten Script! Man kann das z.B. direkt in der rc-Datei eintragen. Dann hat man es aber nur bei seiner Shell, aber bei anderen Dingen scheint das ja auch nicht zu stören. Und wenn man sich die eigenen RC-Files ansieht, dann findet man sowas schon. Zumindest bei meiner SuSE 7.3 ist so ein remount verwirklicht, welches auf ein mount mit ein paar parametern mehr verweist. Mit den besten Grüßen, Konrad Neitzel -- SoftMediaTec GmbH Tel: 0172 / 689 31 45 Fax: 069 / 90 50 99 53
Hallo Philipp, * Am 03.04.2002 um 23:39 Uhr schrieb Philipp Zacharias:
da mir mit dem rm (ja, man soll vorsichtig damit sein, wirklich vorsichtig...) ein kleines Missgeschickt unterlaufen ist, hab ich mir gedacht - den erstetzte doch durch ein mv-Script.
ich würde <rm> nicht durch ein <mv>-Script ersetzten, sondern diesem Script einen eigenständigen Namen geben, z.B. <delete>.
Jetzt hab ich von Scripting nicht die Welt an Ahnung. Meine Frage wäre: Wie übergebe ich ein Argument von einem Befehl an einen anderen? Konkret: Wenn ich rm file.xyz mache (oder rm *.xyz), wie übergebe ich das meinem mv?
<Idee> Die Argumente für dieses Script könnten genauso aussehen wie beim <rm>. Anstatt sie aber direkt an den <mv> weiterzureichen, wäre es sicherlich angebrachter ein <find>-Konstrukt aufzubauen und alle gefundenen Dateien per Pipe in ein Sicherungsarchiv zu packen. Der Name des Archivs könnte z.B. das aktuelle Datum und die Uhrzeit sein. Diese Archive würden dann z.B. unter ~/.papierkorb liegen und per <cron>-Job könnten diese hin und wieder mal aufgeräumt werden. Alle Archive die älter sind als x-Tage werden entgültig per <rm> gelöscht. </Idee> -Jürgen PS. Die SIG ist wieder mal rein zufällig - ehrlich ;-) -- Konstruiere ein System, das selbst ein Irrer anwenden kann, und es wird auch nur ein Irrer anwenden wollen. / Registered Linux-User #130804 http://counter.li.org \ \ Linux Stammtisch Bremerhaven http://linux.hs-bremerhaven.de /
participants (6)
-
Alex Klein
-
B.Brodesser@t-online.de
-
Joerg Thuemmler
-
Juergen Schwarting
-
Konrad Neitzel
-
Philipp Zacharias