LINUX.ORG.RU

Безопасные имена для функций bash, zsh и так далее

 ,


1

6

Добрый день! Подскажите, пожалуйста, по какой логике следует именовать кастомные функции используемой командной оболочки, чтобы они гарантированно не конфликтовали с другими определёнными в системе командами? Заранее спасибо.

★★

Никак.

anonymous
()

... а еще переменные.

Я уже разок в своём скрипте PATH за'overrride'ил с похмелья, потом удивлялся по чему из /bin ничего не запускается. Еще в .bashrc переменную A использовал, забыв сделать ее локальной, и потом ловил феерические баги с однострочниками в консоли... В общем, 50 пудов пепла на моей голове.

Так что переменные тоже.

Подписался.

Kroz ★★★★★
()

гарантированно

Никак, на имена бинарников никаких ограничений нет же. Обычно с этим не заморачиваются, а если нужен именно бинарник, то добавляют “command ”, ну или “=” в zsh.

doushiyou
()

Хоть как

В большинстве случаев хватит для проверки apt-file search bin/$myfuncname и знания списка shell built-ins.

anonymous
()

Только если префиксом каким, максимальноупоротым.

Noob_Linux ★★★★
()
Ответ на: комментарий от Kroz

Переменные (как они там зовутся по науке - подстановки?) маленькими буквами называть необходимо и достаточно, чтобы не пересечься со встроенными в шелл или с экспортами из profile, которые соответственно будут большими.

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

d_a ★★★★★
()

Юзай локальные переменные, и даже локальные старайся юзать с префиксом. Я юзаю __, ибо не питон, и нигде не встретишь почти.

r3lgar ★★★★★
()

Сделай проверку на существование перед объявлением.

anonymous
()
Ответ на: комментарий от Kroz

Еще в .bashrc переменную A использовал, забыв сделать ее локальной, и потом ловил феерические баги с однострочниками в консоли...

Что-то не понял как связано, можешь показать пример однострочника, который не будет работать?

alozovskoy ★★★★★
()
$ help
$ env

Всё что в $PATH проверить, «Shell Variables» в man bash.

ashot ★★★★
()
Последнее исправление: ashot (всего исправлений: 1)

unset PATH

Должно гарантировать. Остаётся проблема конфликтов со встроенными командами, от чего так просто не избавиться.

DonkeyHot ★★★★★
()

Не писать ничего большого на bash'e. Реали проще договриться в команде, что в качестве костыль-языка будем использовать python, ruby, perl, etc. Минималльное скриптование будет легко всем освоить.

anonymous
()

Ответ

$ [[ -n $( type -t ls ) ]] && echo "Function/alias/command exists"
Function/alias/command exists

$ [[ -v A ]] && echo "Variable exists"
Variable exists
Kroz ★★★★★
()
Ответ на: комментарий от Norong

Если вопросов больше нет, то помечай тему как решенную.

Kroz ★★★★★
()

Использовать скриптовые языки, исключающие такие конфликты.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.