Мой .bashrc имел некоторый повторяющийся код, поэтому я использовал функцию, чтобы упростить его
do_stuff() {
local version=$1
export FOO_${version}_X="17"
export FOO_${version}_Y="42"
}
do_stuff '5.1'
do_stuff '5.2'
Однако теперь, когда я использую свою оболочку, имя «do_stuff» находится в области видимости, поэтому я могу завершить табуляцию и запустить эту функцию (что может привести к путанице в переменных среды). Есть ли способ сделать "do_stuff" видимым только внутри .bashrc?
()
для создания подоболочки. Другой возможностью для простых случаев является использованиеfor version in 5.1 5.2
цикла, хотя это позволяетversion
избежать.Ответы:
Используйте в
unset
качестве последней строки в вашем.bashrc
:удалит / отменит функцию
do_stuff
.Для удаления / сброса переменных вызовите его следующим образом:
источник
if type do_stuff >/dev/null 2>&1; then echo "exists"; else echo "dont"; fi
.do_stuff
используется внутри другой функции. Когда вы вызовете эту функцию, вы получитеbash: do_stuff: command not found
. Я знаю, что это не тот случай, о котором говорил опер, но на это стоит обратить внимание.Другой вариант - использовать подчеркивания, как в других скриптовых языках, чтобы указать, что вы не намерены делать эту функцию общедоступной. Вероятность того, что вы введете _do_foo, довольно мала и также вряд ли будет конфликтовать с кем-либо еще.
источник
Единственное решение, которое я могу придумать, это подчеркнуть его и дать ему довольно уникальное имя, может быть, даже пространство имен с точками, такими как язык причудливых штанов ( но это не сработает в старом
sh
).Черт, в этом не будет никаких конфликтов:
источник
Как предлагается в комментарии, вы можете использовать подоболочку:
Мы строим другой скрипт на стандартном выводе subshell для единственного побочного эффекта, который мы хотим (используя
here
документ<<SIDE
). Тогда мы с источником.
.Сила «Mise En Abime» в
sh
является пугающим источником удивления.источник