измените cp для копирования в текущий каталог, если ничего не указано

279
kilojoules

Могу ли я изменить его cpтак, чтобы он копировался в текущий каталог, если я не указал пункт назначения?

Я хочу, чтобы эта команда $ cp ../launcher.sh .была эквивалентна $ cp ../launcher.sh. Возможна ли эта модификация?

редактировать

Вот моя лучшая попытка на данный момент. Когда я называю funciton чем-то другим, чем cpэто работает ...

function cp() { if [ "$#" -ne 1 ]; then cp $1 $2 else cp $1 . fi } 
0
написать свой собственный сценарий sh, а затем псевдоним его для cp? BlueWizard 7 лет назад 0
Это звучит идеально! kilojoules 7 лет назад 0
если это поможет вам, вы можете ответить на свой вопрос. Те, кто с такой же проблемой могут найти ваше решение BlueWizard 7 лет назад 0
Я на самом деле не знаю, как написать функцию bash `cp` kilojoules 7 лет назад 0
вам не нужно переписывать cp, а просто направить все параметры в существующую функцию cp. Проверьте, есть ли у вас только один параметр пути, и если это так, вызовите cp с $ 1 и путем выполнения. BlueWizard 7 лет назад 0
@JonasDralle Я отредактировал свой вопрос, чтобы показать мою попытку сделать это. Это работает, когда я вызываю функцию `cpp`, но не когда я вызываю функцию` cp` (я думаю, что это создает рекурсивное определение) ... kilojoules 7 лет назад 0
Если бы вы использовали `/ bin / cp` вместо` cp` в теле функции, то я думаю, что это сработало бы. У меня уже есть псевдоним `cp`, но я протестировал похожую функцию с` mv` и `/ bin / mv`, и это было нормально. AFH 7 лет назад 1

1 ответ на вопрос

2
AFH

Вам нужно что-то вроде: -

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

Они могут быть добавлены, ~/.bashrcесли вы хотите полупостоянное изменение.

Обратите внимание, что псевдоним не будет работать в скрипте: если вам нужно изменение, которое будет работать в скриптах, после проверки местоположения реального в cpпервую очередь, вы можете использовать личный $HOME/binкаталог во главе вашего $PATHсписка и в нем создать исполняемый скрипт cpсодержащий: -

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

Вам нужно будет добавить export PATH=$HOME/bin:$PATHв~/.bashrc

Также обратите внимание, что любые параметры перед первым файлом приведут к аннулированию теста для одного параметра. Вам нужно будет отсканировать параметры в функции, чтобы проверить, не находятся ли параметры, начиная с -остановки --, а затем убедиться, что остался только один параметр.

Похожие вопросы