Как устранить ошибки sh из импортированных функций bash?

\ 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 renameusa )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 renameahogarían los nombres de archivo que comienzan con -.

2
14.06.2019, 20:12
2 ответа

Не следует экспортировать функции.Вместо этого я предлагаю использовать источник .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

2
27.01.2020, 21:58

Простое решение — не использовать их. Поскольку ~/.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.


Чтобы уточнить, что, как я предполагаю, происходит здесь, основываясь на информации в вашем вопросе и комментариях, следующее:

  1. Вы врезаетесь в машину.

  2. Поскольку вы подключаетесь к нему по ssh, это запускает /bin/shпо умолчанию в качестве оболочки входа.

  3. Поскольку это оболочка для входа в систему, она будет источником ~/.profile.

  4. Поскольку ваш .profileснова настроен на источник ~/.bashrc(, не стандартный, а обычный ), теперь вы читаете .bashrc, хотя, возможно, вы не используете bash.

  5. Поскольку ваш .bashrcнастроен на источник ~/.bash_aliases, вы также читаете этот файл, что приводит к ошибкам.

Еще одна причина, по которой лично я не являюсь сторонником решения, принятого некоторыми системами сделать источником по умолчанию ~/.bashrc~/.profile.

2
27.01.2020, 21:58

Теги

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