cp -f не может перезаписать псевдоним cp -i

8

В моем файле /home/user/.bashrc у меня есть эти псевдонимы для предотвращения ошибок:

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

Если я действительно уверен в том, что я делаю, я могу перезаписать rmи mvиспользовать псевдонимы с помощью rm -fили mv -f, он не спросит меня, действительно ли я хочу перезаписать файлы.

Проблема в том, что это не работает для cpкоманды, использование cp -fвсе равно задаст мне вопрос.

Это нормально? Что я должен сделать, чтобы иметь cp -iпсевдоним по умолчанию и использовать cp -fкоманду тоже?

Я использую Debian Wheezy 64bit.

baptx
источник

Ответы:

9

В то время как -fозначает принудительное применение ко всем из них, для cpозначает принудительное, пытаясь сначала удалить пункт назначения, если пункт назначения не может быть обновлен .

Для mvи rm, -fпросто переопределяет -i. Но cpон изменяет поведение утилиты, в данном случае -fне является противоположностью -i, cp -i -fимеет смысл и означает, что если цель существует, спросите пользователя и, если она не может быть переопределена, сначала удалите ее .

Даже для mvи rm, добавление -f- это не то же самое, что удаление, -iкогда дело доходит до предупреждений и сообщений об ошибках, отправляемых пользователю. Например rm non-existent-file, сообщит об ошибке, пока rm -i -f non-existent-fileне будет.

Как уже упоминалось, чтобы удалить эффект -i, вместо добавления -f, вы должны отключить псевдоним, используя любое из предоставленных решений.

Стефан Шазелас
источник
"Для mv и cp, -f просто переопределяет -i." Вы имеете в виду М.В. и Р.М., я думаю. Спасибо, что объяснили, теперь мне все ясно!
baptx
11

Давая cp -f , опция просто дополняет существующую опцию.

То есть, если у вас есть alias cp='cp -i', слово cp заменяется в команде cp -f, так что вы получитеcp -i -f file1 file2 .

Чтобы переопределить псевдоним:

\cp -f file1 file2

Обратная косая черта перед командой отключит псевдоним. Вы можете использовать command cpвместо \cpчитабельности.

Гуру
источник
Я допустил ошибку в своем посте, когда я говорил о cp -r, я имел в виду cp -f, это исправлено. Ваше решение с обратной косой чертой работает, спасибо! Но я до сих пор не понимаю, почему для команды mv или rm обратная косая черта не нужна, псевдоним напрямую отключается с помощью mv -f и rm -f!
baptx