Sourcing .Bashrc Внутренний скрипт не обновляет переменные ENV

Вы можете настроить функцию для редактирования $ PATH в формате с разделением строк в вашем vi , как если бы это был файл:

pathEdit(){ 
    export PATH="`printf '%s' "$PATH" |tr : '\n'|
    vipe | tr '\n' : |sed 's/:$//'`"; 
}

Если у вас нет ] vipe из moreutils , вы можете эмулировать его с помощью:

#!/bin/sh
set -e
st=0; tmpf=
tmpf="`mktemp`" && exec 3<>"$tmpf" || st="$?"
rm -f "$tmpf"
[ "$st" = 0 ] || exit "$st"
cat >&3
</dev/tty vi "$@" /dev/fd/3 >/dev/tty
cat /dev/fd/3
0
15.11.2018, 01:02
1 ответ

Ваш ~/.bashrcфайл определяет, является ли он источником интерактивной или не -интерактивной оболочки:

case $- in
    *i*) ;;
    *) return ;;
esac

Когда этот файл получен из сценария (, который не является -интерактивной оболочкой ), берется ветвь returnи файл не выполняется до конца.

Добавление операторов exportв конец файла будет означать, что они не будут выполняться при получении из сценария.

Решение может состоять в том, чтобы записать операторы exportв отдельный файл и получить его из вашего сценария (и, возможно, также из ~/.bashrc, если вы считаете, что это необходимо ).

3
28.01.2020, 02:31

Теги

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