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'