Ich bin ein Neuling. Ich habe einen Alias in der .bashrc-Datei wie folgt festgelegt.
alias myrm='mv /home/user/Trash/*'
Der Zweck ist, dass, wenn ich einen Myrmenkommentar verwende, zum Beispiel $ myrm foo, die Datei "foo" in den Papierkorb verschoben werden muss, der sich in meinem Basisordner befindet (/ home / user / Trash).
Dann habe ich getan
$source ~/.bashrc
Wenn ich danach versuche, myrm durch Eingabe von $ myrm foo zu verwenden, wird die folgende Fehlermeldung angezeigt.
mv: kann nicht stat '/ home / user / Trash / *': Keine solche Datei oder kein solches Verzeichnis
Wie kann dieses Problem gelöst werden?
linux
bash
bash-alias
Phänomen
quelle
quelle
mv SOURCE DESTINATION
und nichtmv DESTINATION SOURCE
. Sieheman mv
undhelp alias
. Verwenden Sie eine Funktion. Siehehelp function
.$1
Ordner zwischen mv und dem Zielordner das 'foo' übernimmt, das Sie beim Ausführen des Skripts angeben.alias myrm='mv -t /home/user/Trash'
Antworten:
Erstens verwenden Sie nicht,
$
wenn Sie einen Alias aufrufen.$
dient zum Erweitern einer Variablen (und einiger anderer Dinge, die für diese Frage nicht besonders relevant sind).Zweitens funktionieren Aliase ein wenig wie Variablen, in dem Sinne, dass sie (auf die Gefahr hin, sich ein wenig zu vereinfachen) nur zu einer Reihe von Wörtern erweitert werden. Sie sagen, Sie möchten es tun
myrm foo
, aber das würde sich erweiternmv /home/user/Trash/* foo
, was keinen Sinn ergibt.Eine einfache Lösung wäre, den Alias zu definieren
Syntax als Alternative zum Syntax.mv -t /home/user/Trash
, der funktionieren würde, weil er denmv
unterstütztMit einer Shell-Funktion können Sie jedoch mehr Flexibilität erzielen. Diese kombinieren die Flexibilität von Skripten mit dem (geringen) Overhead von Aliasen. Zum Beispiel,
wird dazu führen
myrm foo
, interpretiert zu werden alsmv foo /home/user/Trash
.quelle
$
ist von seiner Shell, normalerweise beginnen alle Zeilen in einem Terminal damit$
, dass es sich um eine Nicht-Root-Shell handeltWahrscheinlich ist die einfachere Lösung die Verwendung eines
trash-cli
Pakets. Dann können Sie einfach tunalias myrm=trash
und danntrash foo
erreichen, was Sie wollen. Nur dass foo jetzt gehen wird~/. local/share/Trash
quelle
Das Problem ist, mit muss
mv
man es gerne benutzenmv source destination
.Mit Ihrem Alias ist es umgekehrt
mv destination source
.Außerdem benötigen Sie das Sternchen
*
am Ende nicht, da es mit dem Ziel als Ordner funktioniert. Stellen Sie sicher, dass Ihr Ordner mit/home/user/Trash
existiertmkdir /home/user/Trash
.Um Ihre Alias-Idee zu lösen, würde ich Ihnen empfehlen, sich diese Fragen zum Stackoverflow anzuschauen:
Dies wird zu dieser Lösung führen; Bitte füge dies zu deinem hinzu
~/.bashrc
und mache einsource ~/.bashrc
nach dem Hinzufügen:quelle
Wie in den Kommentaren angegeben, ist die
mv
Syntax anders:das kann mehrere Dateien als Argument behandeln
Dieser einfache Alias behandelt jedoch nicht die Kollision von Dateinamen sowie Metadaten (von wo sie entfernt wurden, ...).
Für eine vollständigere Lösung können Sie einfach das Paket verwenden,
trash-cli
das ziemlich gut ist und nur wenige Tools enthält (z. B. leere Dateien, die X Tage lang im Papierkorb liegen, ...).quelle
Es gibt einen weiteren nützlichen Alias, den Sie in Betracht ziehen könnten, wenn Sie ein
gvfs-bin
Paket auf Ihrem Host installiert haben :Es verschiebt Ihre Dateien in den Papierkorb. Auch sind die richtigen Dateien in Ihrem $ TRASH Ordner geschrieben (wie
info/
,files/
...). Sie müssen sich also keine Sorgen machen. Beispiel: Wenn Sie in den Papierkorb gehen und darauf klickenrestore
, funktioniert dies einwandfrei.Das ist überflüssig,
trash-cli
aber auf Ihrem Host ist möglicherweise nur einer bereits installiert. Wenn Sie also kein Trash-Cli haben, probieren Sie es aus.quelle
trash-cli
Paket? Dies erfordert die Installation von gvfs-bin, das auch nicht auf meinem System installiert ist. Ich war noch nie zuvor auf gvfs gestoßen und habe es unter en.wikipedia.org/wiki/GVfs ein wenig nachgelesen . Ich bin mir immer noch nicht sicher, was seine Existenzberechtigung ist, aber das ist eine andere Frage.trash-cli
kann es nicht besser oder schlechter sein. Ich werde meine Antwort entsprechend aktualisierenDu musst tun
oder anstatt Manpage hierquelle
mv "$1" /home/user/Trash/
) funktioniert nicht in einem Alias (worum es in der Frage geht) und ist in einer Funktion von begrenztem Wert (wie ich in meiner Antwort sagte ,mv "$@" /home/user/Trash
ist besser). Das zweite (mv -t /home/user/Trash/
) war bereits in meiner Antwort und Cyrus 'Kommentar zuvor angegeben.