\
es un operador de comillas en la sintaxis de shell por lo que:
rename s/\(Done\)//g *
Es lo mismo que correr:
rename 's/(Done)//g' *
Y (
, )
son caracteres especiales en la sintaxis de expresiones regulares de perl (que rename
usa )y deben tener el prefijo\
(o cambiarse a [(]
y[)]
)por lo que son tratados literalmente.
Así que aquí, quieres:
rename 's/\s*\(Done\)//g'./*
Aquí también se agrega \s*
para eliminar cualquier espacio en blanco antes de (Done)
, y un prefijo ./
ya que algunas variantes de rename
ahogarían los nombres de archivo que comienzan con -
.
Не следует экспортировать функции.Вместо этого я предлагаю использовать источник .bash_aliases
для всех экземпляров bash
, которым это необходимо. (Думаю, вам нужны функции только интерактивных bash
оболочек.)
Аналогичная проблема упоминается здесь:/bin/sh :ошибка импорта определения функции для `некоторой -функции' , где принятый ответ предлагает переименовать функции.
Вы видите ошибки, даже если /bin/sh
связан с bash
в вашей системе, потому что когда bash
вызывается как sh
, он пытается вести себя как sh
и соответствовать POSIX, см.https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html#Invoked-with-name-sh
Простое решение — не использовать их. Поскольку ~/.bash_aliases
не является стандартным файлом, вы должны явно указать его источник в одном из ваших конфигурационных файлов. Таким образом, простым решением было бы найти строку, которая является источником (, скорее всего, в вашем~/.bashrc
)и заменить ее (или что-то еще в вашей системе, это из Ubuntu):
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
К этому:
if [ -f ~/.bash_aliases ] && [ -n "$BASH_VERSION" ]; then
. ~/.bash_aliases
fi
Таким образом, файл .bash_aliases
будет получен только при запуске bash.
Чтобы уточнить, что, как я предполагаю, происходит здесь, основываясь на информации в вашем вопросе и комментариях, следующее:
Вы врезаетесь в машину.
Поскольку вы подключаетесь к нему по ssh, это запускает /bin/sh
по умолчанию в качестве оболочки входа.
Поскольку это оболочка для входа в систему, она будет источником ~/.profile
.
Поскольку ваш .profile
снова настроен на источник ~/.bashrc
(, не стандартный, а обычный ), теперь вы читаете .bashrc
, хотя, возможно, вы не используете bash.
Поскольку ваш .bashrc
настроен на источник ~/.bash_aliases
, вы также читаете этот файл, что приводит к ошибкам.
Еще одна причина, по которой лично я не являюсь сторонником решения, принятого некоторыми системами сделать источником по умолчанию ~/.bashrc
~/.profile
.