
다음과 같은 명령이나 스크립트를 갖고 싶습니다.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
마지막으로 bash에서 옵션을 찾았 -o
으므로 그걸로 원하는 작업을 시도해 보았습니다. 나는 다음 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
.