쉘이 열린 후 터미널 창을 열고 명령을 실행하려면 어떻게 해야 합니까?

쉘이 열린 후 터미널 창을 열고 명령을 실행하려면 어떻게 해야 합니까?

명령이나 스크립트를 원합니다Bash를 사용하여 새 gnome 터미널 창을 열고 기록 파일을 로드한 후 열어 두세요..

터미널을 닫지 않고 터미널을 열고 명령을 실행하는 방법을 검색했는데 찾은 답변은 기본적으로 다음과 같습니다.이 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

마지막으로 -obash에서 이 옵션을 찾았으므로 이를 사용하여 원하는 작업을 수행해 보았습니다. 나는 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명령을 실행하면 rcfilebash 기록이 다시 활성화되기를 바랐습니다. 그러나 이 역시 예상한 대로 작동하지 않습니다. 왜냐하면 기록이 원본이기 때문입니다 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이것이 수행하는 작업 은 다른 터미널 구성이 유지되도록 기본값(있는 경우)을 가져오는 것입니다 . 그런 다음 bash에서 사용되는 함수가 호출될 때 한 번 실행될 함수를 정의한 다음 PROMPT_COMMAND자체 설정을 해제하고 원본을 복원합니다 PROMPT_COMMAND.

관련 정보