cp -f kann den Alias ​​cp -i nicht überschreiben

8

In meiner Datei /home/user/.bashrc habe ich folgende Aliase, um Fehler zu vermeiden:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Wenn ich wirklich sicher bin , was ich tue, kann ich überschreiben rmund mvAliase rm -foder mv -fes wird mich nicht fragen , ob ich wirklich Dateien überschreiben will.

Das Problem ist, dass es für den cpBefehl nicht funktioniert . Mit cp -fwird mir immer noch eine Frage gestellt.

Ist das normal? Was soll ich tun, um cp -istandardmäßig einen Alias zu haben und auch cp -fBefehle verwenden zu können?

Ich benutze Debian Wheezy 64bit.

Taufe
quelle

Antworten:

9

Während dies -fbedeutet , alle zu erzwingencp , bedeutet dies , dass versucht wird, das Ziel zuerst zu entfernen, wenn das Ziel nicht aktualisiert werden kann .

Für mvund rm, -fnur überschreibt -i. Aber für cp, es ändert das Verhalten des Dienstprogramms, -fist nicht das Gegenteil von -iin diesem Fall, cp -i -fmacht Sinn und bedeutet, wenn das Ziel existiert, fragen Sie den Benutzer und wenn es nicht überschrieben werden kann, entfernen Sie es zuerst .

Selbst für mvund rmist das Hinzufügen -fnicht gleichbedeutend mit dem Entfernen -ivon Warn- und Fehlermeldungen, die an den Benutzer gesendet werden. Zum Beispiel rm non-existent-filewürde ein Fehler gemeldet, während rm -i -f non-existent-filedies nicht der Fall wäre .

Wie bereits erwähnt, sollten Sie den Alias ​​mithilfe einer der bereitgestellten Lösungen deaktivieren , um den Effekt zu entfernen -i, anstatt ihn hinzuzufügen -f.

Stéphane Chazelas
quelle
"Für mv und cp überschreibt -f nur -i." Du meinst mv und rm, denke ich. Danke für die Erklärung, es ist mir jetzt sehr klar!
Taufe
11

Durch das Geben cp -faddiert sich die Option einfach mit der vorhandenen Option.

Das heißt, wenn Sie eine haben alias cp='cp -i', wird das Wort cp im Befehl ersetzt cp -f, so dass Sie erhalten cp -i -f file1 file2.

So überschreiben Sie den Alias:

\cp -f file1 file2

Der Backslash vor dem Befehl deaktiviert den Alias. Sie können command cpanstelle von \cpfür die Lesbarkeit verwenden.

Guru
quelle
Ich habe einen Fehler in meinem Beitrag gemacht, als ich über cp -r sprach, meinte ich cp -f, es ist korrigiert. Ihre Lösung mit einem Backslash funktioniert, danke! Aber ich verstehe immer noch nicht, warum der Backslash nicht für den Befehl mv oder rm benötigt wird, der Alias ​​ist direkt mit mv -f und rm -f deaktiviert!
Taufe