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

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

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

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

function cp() {
if [ "$#" -ne 1 ]; then
    cp $1 $2
else
    cp $1 .
fi
}

1 ответ1

2

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .