
Я хотел бы иметь команду или скрипт, которыйоткрывает новое окно gnome-terminal с bash, загружает файл истории и остается открытым.
Я искал, как открыть терминал и выполнить команду, не закрывая его, и ответы, которые я нашел, по сути, обобщены вэтот ответ stackoverflow.
Основываясь на этих методах, я попробовал выполнить следующую команду:
gnome-terminal -e "bash -c 'history -r ~/history.txt; exec $SHELL'"
Однако история, которая появляется в новом окне, не та, что в, history.txt
а та, что в файле по умолчанию, .bash_history
. Я подумал, что, поскольку после history -r
команды, которую я выполняю bash
, и которая является источником .bashrc
файла, возможно, .bashrc
что-то делает, что влияет на загруженную мной историю.
Исходя из этого, я попробовал rcfile
вариант из ответа, ссылка на который приведена выше, чтобы я мог включать команды после .bashrc
, в результате чего получилось следующее rcfile
:
FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/history.txt
Однако, когда я запускаю следующую команду:
gnome-terminal -e "bash --rcfile rcfile"
История в новом терминале по-прежнему та же, что и в .bash_history
. Если я добавлю history
команду в , rcfile
то покажет, что история из history.txt
была загружена, поэтомучто-то после rcfile
перезаписывает историю, которую я загружаю.
Я также обнаружил, что если ясбросить HISTFILE
переменнуюс export HISTFILE=''
в конце rcfile
,история history.txt
не перезаписываетсяи работает. Однако я не хочу отключать, HISTFILE
потому что хочу, чтобы история сохранялась, .bash_history
когда я использую недавно открытый терминал.
Наконец, я нашел -o
опцию в bash, поэтому я попытался сделать с ней то, что мне нужно. Я изменил ее rcfile
на:
FILE=~/.bashrc && test -f $FILE && source $FILE
history -c && history -r ~/saved/history.txt
set -o history
и выполнил следующую команду:
bash --rcfile rcfile.txt +o history
Я надеялся, что запуск bash
with +o history
предотвратит history.txt
перезапись истории, в то время как set -o history
команда в rcfile
повторно активирует историю bash. Однако это также не работает так, как предполагалось, поскольку история — это та, из, history.txt
но тогда больше нет журнала истории, и мне приходится вручную вводить set -o history
ее, чтобы она работала.
Итак, по сути, все, что я пробовал, возвращает меня к одному и тому же вопросу:как открыть новый терминал с помощью bash изатемвыполнить команду, как будто пользователь вводит его?
Кроме того, я хотел бы лучше понятьчто происходит после того, rcfile
как выполняется, так как я не смог найти ни одного другого соответствующего файла, который был бы получен. Иесть ли способ отключить это поведение из командной строки??
решение1
Мне удалось найти обходной путь, используя PROMPT_COMMAND
переменную и rcfile.txt
файл, упомянутый в вопросе. Вы можете запустить команду
gnome-terminal -e "bash --rcfile rcfile.txt"
Где содержание rcfile.txt
следующее:
FILE=~/.bashrc && test -f $FILE && source $FILE
my_init_func() {
# Insert desired commands here. In my case, history -r history.txt
PROMPT_COMMAND=`echo $1`
eval $PROMPT_COMMAND
unset -f $FUNCNAME
}
PROMPT_COMMAND="my_init_func \'$PROMPT_COMMAND\'"
Что это делает, так это источник по умолчанию, .bashrc
если он существует, чтобы сохранить любые другие конфигурации терминала. Затем он определяет функцию, которая будет запущена один раз при вызове PROMPT_COMMAND
используемого в bash, затем отменит себя и восстановит исходный PROMPT_COMMAND
.