В то время как -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
, необходимо отключить псевдоним с помощью любого из предоставленных решений.
Вы используете bash-completion
пакет (или производная). Для каждого завершения аргумента cd
команда (как показано complete -p
вывод):
complete -o nospace -F _cd cd
_cd
функция вызывается для определения завершений (немного отредактированный для краткости):
_cd()
{
local cur prev words cword
_init_completion || return
local IFS=$'\n' i j k
compopt -o filenames
if [[ -z "${CDPATH:-}" || "$cur" == ?(.)?(.)/* ]]; then
_filedir -d
return 0
fi
....
Так, например, когда Вы завершаетесь на каталоге без CDPATH
набор, замеченный в последний раз аргумент замеченной команде -d
, и это помещается автоматически в _
. Существует несколько других путей выполнения кода в той функции с подобными побочными эффектами.
С тех пор _
внутренний удар, стандартное сохраняют/восстанавливают (что касается IFS
) не будет работать, как надеялся. Вы могли сделать это с небольшим обманом:
_cd()
{
local save_="$_"
...
: $save_
return 0
Необходимо сохранить _
сразу на записи в функцию, :
пустая команда, которая не делает ничего серовато-синего, но имеет обычные побочные эффекты команды, такие как установка _
. Эта операция восстановления будет требоваться для каждой точки возврата каждой потенциально разрушительной функции. Существует тонкость здесь также: обычно _
сразу установлен после возврата из функции (к последнему аргументу вызова функции, как ожидалось), который сделал бы этот метод неэффективным. Но, этого не происходит, когда функция завершения вызывается, так как это не явно вызванный. Я не полагаю, что это очень устойчиво...
(Я предпочитаю расширение истории и придерживаюсь !$
который не переносит эту проблему.)