터미널이 열려 있는 동안 실행된 명령은 기록에 표시되지 않습니다.

터미널이 열려 있는 동안 실행된 명령은 기록에 표시되지 않습니다.

terminal.sh다음과 같은 간단한 스크립트 가 있습니다 .

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

나는 기본적으로 매일 사용해야 하는 몇 개의 탭이 있는 터미널을 여는 데 이를 사용합니다. 하지만 문제는 echo history해당 탭의 기록에 명령이 추가되지 않는다는 것입니다. 예를 들어 내 탭 중 하나는 응용 프로그램 서버입니다. 다시 시작해야 할 때 일반적으로 Ctrl+ C, Ctrl+ L및 를 입력 Up하지만 Enter이 스크립트로 실행하면 bash에 실행된 줄이 추가되지 않고 마지막으로 실행된 명령은 일반적으로 입니다 exit. 그래서 결국 서버를 다시 시작하지 않고 탭을 닫게 됐는데, 그게 정말 짜증났어요.

나는 보았다이것, 다음을 추가해 보았습니다.

HISTFILE=~/.bash_history
set -o history

내 스크립트 시작 부분에서 terminal.sh실행된 스크립트에 추가도 시도했습니다.

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

하지만 둘 다 도움이 되지 않습니다. 또한 스크립트를 실행하기 전에 추가를 시도했지만 history -s echo history그것도 도움이 되지 않았습니다.

이런 방식으로 실행된 모든 명령을 기록에 어떻게 추가할 수 있나요?

나는 또한 다음을 시도했습니다.

#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

답변1

다음을 수행할 수 있습니다.

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

(여기서는 vi /etc/issue명령으로 사용됨)

이것의 장점은 $CMD해당 쉘에 대한 작업으로 실행되므로 재개를 일시 중단하고 다른 작업으로 중단할 수 있으며 쉘 환경에 영향을 미칠 수 있다는 것입니다(예를 들어 다음을 수행할 수 있음 CMD='PATH=$foo:$PATH').

이는 귀하 가 직접 ~/.bashrc설정하지 않았다고 가정합니다 $PROMPT_COMMAND.

편집하다:

여러 탭의 경우:

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'

관련 정보