터미널 창(Gnome Terminal 3.6.2)을 열고 명령(예: )을 입력한 echo "hello"
다음 새 터미널 창을 열고 해당 명령을 입력하면 <Ctrl>Rhello
기록에서 해당 명령을 찾아낼 수 있을 것으로 예상할 수 있습니다.
(reverse-i-search)`':
그런데 새로 입력한 명령이 프롬프트 에 나타나지 않습니다 .
그러나 일부 명령은일부단말기하다검색에 표시됩니다.
그렇다면 내 Linux(Mint 17)는 어떤 터미널의 명령이 다른 터미널의 검색 기록에 표시되어야 하는지 어떻게 결정합니까?
답변1
터미널 앱 자체는 설명하는 기능과 아무 관련이 없습니다. 터미널이 하는 일은 텍스트 입력과 출력뿐이고 나머지는 터미널에서 수행된다는 점을 이해하는 것이 매우 중요하고 유용합니다.껍데기. 터미널은 단순히 키 입력을 터미널에서 실행 중인 프로그램으로 리디렉션하고 해당 프로그램에서 생성된 출력을 표시하며 터미널 크기 조정에 대해 프로그램에 알릴 수 있습니다. 동작을 변경하려면 무엇을 구성해야 하는지 알아야 하므로 이를 이해하는 것이 중요합니다.
대부분의 경우 Linux의 기본 셸은 다음과 같습니다.세게 때리다, 그건세게 때리다Ctrl-R 및 터미널 창에서 수행하는 기타 모든 작업에 반응하는 사람.
당신이 말하는 기능은 bash 기록입니다. Bash가 기록을 읽고 쓰는 방법과 시기에는 다양한 옵션이 있습니다. 기본적으로 bash는 셸을 종료할 때 기록 파일에 기록을 추가하므로 한 셸에 입력하면 이 명령은 다른 셸의 기록에 나타나지 않습니다.
다음을 추가하면 각 명령을 입력한 후 저장할 수 있습니다.
export PROMPT_COMMAND="history -a"
~/.bashrc 파일에.
각 명령 후에 다시 로드할 수도 있습니다.
export PROMPT_COMMAND="history -a; history -r"
하지만 각 콘솔을 특정 작업 전용으로 지정하고 종료하기 전에 해당 특정 작업의 기록을 유지하는 것이 더 합리적이기 때문에 이 방법을 권장하지 않습니다.
답변2
귀하가 Mint를 사용하고 있으므로 bash
쉘로 실행 중이라고 가정합니다.
다른 창에서 최근에 입력한 명령이 보이지 않는 이유는 bash
현재 실행 중인 프로세스의 기록 목록이 메모리에 유지되고, 세션 간 기록을 저장하기 위해 다른 기록 목록이 디스크에 유지되기 때문입니다.
대화형 bash
셸이 시작 되면 ~/.bash_history
실행 중인 셸 프로세스의 런타임 기록 목록으로 기록 파일(기본적으로)을 읽어옵니다. 새 명령을 입력하면 해당 명령은 디스크의 기록 파일이 아닌 프로세스의 기록 목록에만 추가됩니다.
마찬가지로 bash
프로세스는 종료되기 전에 디스크의 기록 파일에 기록 목록을 기록합니다.
한 터미널 창(T1)의 다른 창(T2)에서 명령에 액세스하려면 다음을 수행할 수 있습니다.
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
다른 콘솔에서 위 명령을 실행한 후 bash
T2의 기록 목록에서 T1의 명령을 찾을 수 있습니다.
bash
기록 목록 동작에 영향을 미칠 수 있는 환경 변수와 옵션이 많이 있습니다 . 내장 명령 에서 bash
자세한 내용을 찾아 보세요 help
. help history
맨페이지 bash
( man bash
) 및배쉬 참조 매뉴얼.