Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I have the simple following terminal.sh script:

#bin/bash --login
str=(--tab --title="Test" -e "bash --login -c 'echo history';bash")
gnome-terminal "${str[@]}"
exit 0

I basically use it to open a terminal with several tabs that I need to use daily. But the problem is that the echo history command is not added to the history of that tab. So, for example, one of my tabs is the application server. When I need to restart it, I usually type Ctrl+C, Ctrl+L, Up and Enter, but when I use this script to run it, it doesn't add the line executed to the bash, and then the last command executed is normally exit. So I end up closing the tab instead of restarting the server, which is incredbly annoying.

I saw this, and I tried adding:

HISTFILE=~/.bash_history
set -o history

To the start of my terminal.sh script, and also tried adding to the script executed:

str=(--tab --title="Test" -e "bash --login -c 'HISTFILE=~/.bash_history;set -o history;echo a';bash")

But neither helped. I also tried adding history -s echo history before executing the script, but that didn't help either.

How can I add all commands executed this way to the history?

I aslo tried:

#bin/bash --login

cmd='echo test'
cmd_e="bash --login -c 'unset PROMPT_COMMAND;history -s '\''$cmd'\''; eval '\''$cmd'\''';bash"
str=(--tab --title="History Test" -e "$cmd_e")

gnome-terminal "${str[@]}"

exit 0
share|improve this question
1  
See this answer to a related question (that's for xfce-terminal but can be adapted to your usage). –  Stéphane Chazelas May 21 at 12:58

1 Answer 1

up vote 3 down vote accepted

You could do something like:

SHELL=/bin/bash PROMPT_COMMAND='unset PROMPT_COMMAND; history -s "$CMD";
    eval "$CMD"' CMD='vi /etc/issue' gnome-terminal

(here using vi /etc/issue as your command).

That has the advantage of running $CMD as a job of that shell, so you can suspend resume, interrupt it as other jobs and it can affect the environment of the shell (for instance you can do CMD='PATH=$foo:$PATH').

It assumes your ~/.bashrc doesn't set $PROMPT_COMMAND itself.

Edit:

For multiple tabs:

PROMPT_COMMAND='unset PROMPT_COMMAND; history -s "$CMD"; eval "$CMD"
  ' gnome-terminal --tab --title /etc/issue -e 'env CMD="vi /etc/issue" bash' \
                   --tab --title who -e 'env CMD=who bash'
share|improve this answer
    
Your code work flawlessly the way it is! But I'm having trouble integrating it with mine... I need my syntax because I need to open multiple tabs in the same terminal, each one with one title. I added how I did it on the question. It runs, echoes, but doesn't add... –  Luan Nico May 21 at 13:39

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.