Ändern Sie cp in das aktuelle Verzeichnis, wenn nichts anderes angegeben ist

357
kilojoules

Kann ich die Datei cpso ändern, dass sie in das aktuelle Verzeichnis kopiert wird, wenn kein Ziel angegeben wird?

Ich möchte, dass dieser Befehl $ cp ../launcher.sh .äquivalent ist $ cp ../launcher.sh. Ist diese Änderung möglich?

Bearbeiten

Hier ist mein bisher bester Versuch. Wenn ich die Funktion etwas anderes anrufe als cpes funktioniert ...

function cp() { if [ "$#" -ne 1 ]; then cp $1 $2 else cp $1 . fi } 
0
schreib dein eigenes sh-script und dann alias es auf cp? BlueWizard vor 7 Jahren 0
Das klingt super! kilojoules vor 7 Jahren 0
Wenn dies Ihnen hilft, können Sie Ihre eigene Frage beantworten. Die anderen mit dem gleichen Problem können Ihre Lösung finden BlueWizard vor 7 Jahren 0
Ich kann nicht wirklich eine bash `cp` Funktion schreiben kilojoules vor 7 Jahren 0
Sie müssen cp nicht neu schreiben, sondern nur alle Parameter der vorhandenen cp-Funktion zuordnen. Überprüfen Sie, ob Sie nur einen Pfadparameter haben. Wenn ja, rufen Sie cp mit $ 1 und den Ausführungspfad auf BlueWizard vor 7 Jahren 0
@ JonasDralle Ich habe meine Frage bearbeitet, um meinen Versuch zu zeigen. Es funktioniert, wenn ich die Funktion "cpp" aufrufe, aber nicht, wenn ich die Funktion "cp" aufrufe (ich denke, das erzeugt eine rekursive Definition) ... kilojoules vor 7 Jahren 0
Wenn Sie im Funktionskörper "/ bin / cp" anstelle von "cp" verwendet hätten, hätte es meiner Meinung nach funktioniert. Ich habe bereits Alias ​​`cp`, aber ich habe eine ähnliche Funktion mit` mv` und `/ bin / mv` getestet, und das war in Ordnung. AFH vor 7 Jahren 1

1 Antwort auf die Frage

2
AFH

Sie brauchen etwas wie: -

CP() { [ $# == 1 ] && cp "$@" . || cp "$@"; } alias cp=CP 

Diese können hinzugefügt werden, ~/.bashrcwenn Sie eine semi-permanente Änderung wünschen.

Beachten Sie, dass ein Alias ​​in einem Skript nicht funktioniert: Wenn Sie eine Änderung benötigen, die in Skripts funktioniert, können Sie nach der Überprüfung der Position des Real- cpObjekts ein privates $HOME/binVerzeichnis an der Spitze Ihrer $PATHListe verwenden und darin ein ausführbares Skript erstellen cpenthaltend: -

/bin/bash [ $# == 1 ] && /bin/cp "$@" . || /bin/cp "$@" 

Sie müssen hinzufügen export PATH=$HOME/bin:$PATHzu~/.bashrc

Beachten Sie auch, dass alle Optionen vor der ersten Datei den Test für einen einzelnen Parameter ungültig machen. Sie müssen die Parameter in der Funktion scannen, um nach Parametern zu suchen, die nicht mit beginnen -, den Test anhalten --und dann sicherstellen, dass nur noch ein Parameter übrig ist.