Обновление ~/.bashrc файл для сценария

Я разрабатываю сценарий, который настроит и установит настольную среду человечности. Одно из изменений, которые это вносит, добавляет функции и другие вещи к ~/.bashrc файл. Позже в сценарии, я должен вызвать одну из функций, добавленных к ~/.bashrc но я добираюсь command not found ошибка. Вот сценарий в качестве примера:

# t.sh
#!/bin/bash

text='test-func() { echo It works!; }'
echo "$text" >> ~/.bashrc

source ~/.bashrc
test-func

echo checkpoint

Вывод:

./t.sh: line 10: test-func: command not found
checkpoint

Я принял определение источника ~/.bashrc обновил бы оболочку, разрешающую мне звонить test-func но это не делает. При поиске с помощью Google вокруг я нашел exec bash заменять source ~/.bashrc.

Новый вывод:

./t.sh: line 10: test-func: command not found

От моего понимания exec, это просто создает новую оболочку, отключающую сценарий; поэтому "контрольная точка" никогда не распечатывается.

Как я могу обновить ~/.bashrc и выполненный обновления в том же сценарии?

Любая справка очень ценится.

4
задан 25 March 2017 в 13:26

1 ответ

На самом деле, Ваш .bashrc действительно становится полученным. Однако .bashrc предназначается, чтобы быть считанным интерактивными оболочками. Оболочка, которая запускает скрипт, не является интерактивной.

В Ubuntu, .bashrc проверки, что оболочка, получающая его, является интерактивной, и иначе останавливает выполнение. Необходимо найти эту строку к началу:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Это заставляет Ваш сценарий прекращать получать файл, прежде чем он считает Вашу функцию.

можно просто присоединить функцию к другому файлу, чем .bashrc, и это должно хорошо работать. Если Вы настаиваете на том, чтобы использовать .bashrc, Вы могли бы просто установить переменную PS1 на некоторое фиктивное значение в Вашем сценарии прежде, чем получить .bashrc.

4
ответ дан 1 December 2019 в 09:45

Другие вопросы по тегам:

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