Как открыть окно терминала и выполнить команду после открытия оболочки?

Как открыть окно терминала и выполнить команду после открытия оболочки?

Я хотел бы иметь команду или скрипт, которыйоткрывает новое окно 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

Я надеялся, что запуск bashwith +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.

Связанный контент