O que há no histórico de comandos de uma nova janela de terminal?

1

Se eu abrir uma janela de terminal (terminal Gnome 3.6.2) e digitar um comando, digamos echo "hello" , abra uma nova janela de terminal e digite <Ctrl>Rhello , eu esperaria poder extrair esse comando de a história.

Mas meu comando recém-digitado não aparece no prompt (reverse-i-search)'': .

Mas alguns comandos do algum terminal do aparecem na pesquisa.

Então, como meu Linux (Mint 17) decide quais comandos dos terminais devem aparecer em quais históricos de pesquisa de outros terminais?

    
por LondonRob 19.11.2015 / 15:00

2 respostas

3

O próprio aplicativo de terminal não tem relação com o recurso que você descreve. É importante e muito útil entender que todo terminal faz a entrada de texto e a saída é feita em shell . O terminal apenas redireciona seus pressionamentos de tecla para o programa em execução no terminal, exibe a saída gerada por esse programa e é capaz de informar esse programa sobre os redimensionamentos do terminal. É importante entender isso porque você precisa saber o que deve configurar para mudar o comportamento.

Na maioria absoluta dos casos, o shell padrão no Linux é bash , e é bash quem reage em seu ctrl-R, e todas as outras coisas que você faz em janela do terminal.

O recurso sobre o qual você está falando é a história do bash. Há muitas opções de como e quando o bash lê e grava o histórico. Por padrão, o bash anexa o histórico ao arquivo de histórico ao sair do shell, portanto, enquanto você digita em um shell, esses comandos nunca aparecerão no histórico de outros shells.

Você pode salvar após cada comando digitado, se adicionar:

export PROMPT_COMMAND="history -a"

para o seu arquivo ~ / .bashrc.

Você também pode recarregar após cada comando:

export PROMPT_COMMAND="history -a; history -r"

mas eu não recomendo isso, porque faz mais sentido dedicar cada console para tarefas específicas e ter histórico para aquela tarefa em particular até a saída.

    
por 19.11.2015 / 15:27
-1

Já que você está no Mint, vamos supor que você está executando bash como seu shell.

O motivo pelo qual você não vê comandos digitados recentemente de outras janelas é porque bash mantém uma lista de histórico na memória para o processo atualmente em execução e uma lista de histórico diferente no disco para salvar o histórico entre as sessões.

Quando o shell bash interativo é inicializado, ele lê seu arquivo de histórico ( ~/.bash_history por padrão) na lista do histórico de tempo de execução do processo do shell em execução. À medida que você digita novos comandos, eles são anexados apenas à lista de histórico desse processo, não ao arquivo de histórico no disco.

Da mesma forma, o processo bash grava a lista de histórico no arquivo de histórico no disco antes de sair.

Se você tem comandos em uma janela de terminal (T1) que você gostaria de acessar em outra janela, (T2) você pode fazer isso:

T1> history -a  # append history lines from this session to the history file

T2> history -r  # read the history file and append contents to the history list

Depois de executar os comandos acima em diferentes bash consoles, você poderá encontrar os comandos de T1 na lista de histórico de T2.

Existem muitas variáveis de ambiente e opções em bash para afetar o comportamento da lista de histórico. Encontre mais detalhes no comando bash help integrado: help history . Há ainda mais na página bash man ( man bash ) e no Manual de referência do Bash .

    
por 20.11.2015 / 01:08