Если вы не уверены, содержит ли файл спецификацию UTF -8, тогда это (предполагает, что реализация GNUsed
)удалит спецификацию, если она существует, или не внесет никаких изменений, если она не существует. т.
sed '1s/^\xEF\xBB\xBF//' < orig.txt > new.txt
Вы также можете перезаписать существующий файл с помощью опции -i
:
sed -i '1s/^\xEF\xBB\xBF//' orig.txt
Если вы используете BSD-версию sed
(, например macOS ), вам нужно, чтобы bash выполнял экранирование:
sed $'1s/\xef\xbb\xbf//' < orig.txt > new.txt
Сset -a
(акаset -o allexport
)bash
экспортирует все функции , объявленные после этого, в дополнение к переменным.
Ошибка указывает на то, что bash
не может импортировать функцию с именем /users/avnamn/bin/pricer
, а не pricer
.
Скорее всего, перед запуском source./variables.sh
вы запускали (, возможно, в одном из файлов запуска):
alias pricer=/users/avnamn/bin/pricer
Итак, когда source
читать:
pricer() { "/users/avnamn/bin/pricer" "$@" ; }
Он был преобразован расширением псевдонима в:
/users/avnamn/bin/pricer() { "/users/avnamn/bin/pricer" "$@" ; }
(который, кстати, создает функцию, которая рекурсивно вызывает себя ).
Вы можете определить функцию с таким именем в bash
, но bash
не позволит вам экспортировать ее. Если вы попытаетесь export -f /users/avnamn/bin/pricer
, bash
сообщит:
bash: line <n>: export: /users/avnamn/bin/pricer: cannot export
Еще с allexport
,функция тем не менее экспортируется (, что, как вы можете утверждать, является ошибкой ), но последующие bash
оболочки, запущенные в этой среде, откажутся импортировать ее, поэтому сообщение, которое вы получите при запуске ./script.sh
, который запускает новый bash
вызов.
Функция экспорта функций bash очень опасна (, особенно в системах, где sh
равно bash
! ), его следует использовать с осторожностью.
Функция allexport
также довольно опасна (, особенно в bash
, которая также экспортирует функции )и то, что вы не хотели бы делать в интерактивной оболочке.
Здесь, если вы хотите экспортировать ряд переменных в среду без явного вызова export
, я рекомендую вам сделать:
set -o allexport
A=1
B=2
...
set +o allexport
(и убедитесь, что вы не объявляете функции в этом разделе кода ).
Псевдонимы были бедными функциями в csh, у которых не было функций. В Korn -, как и в оболочках, это полезно только для вещей, которые нельзя сделать с помощью функций, то есть когда вы хотите выполнить некоторое преобразование кода, а не определить какую-то новую команду. Их также лучше избегать в большинстве случаев.