스크립트에서 새 Konsole을 열고 명령을 실행하고 결론에 따라 대화형으로 전환

스크립트에서 새 Konsole을 열고 명령을 실행하고 결론에 따라 대화형으로 전환

터미널 을 여는 스크립트(시작 시 실행)를 얻을 수 있기를 원합니다 konsole.
열리면 몇 가지 지속적인 작업(예: 디렉토리 변경 및 소스 bashrc)을 수행하고 장기 실행 프로그램을 실행합니다.
프로그램이 충돌하거나 내가 접속하면 <ctrl+c>표준 입력에서 명령을 받아들이기 시작합니다(예: 전체 시간 동안 대화형인 것처럼 다시 시도하려면 'up-enter').

나는 그것을 작동시키기 위해 많은 것을 시도했습니다(현재는 그것을 가져오고 ls완료 시 대화형으로 되돌리려고 노력 중입니다).

konsole -e ls
konsole --hold ls
konsole -e /bin/bash -c ls
konsole --hold -e "/bin/bash -c ls"
konsole -e "/bin/bash -i -c ls"
konsole -e /bin/bash -i -c ls
konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"

echo ls > /tmp/konsolebash
konsole -e "/bin/bash -i --rcfile /tmp/konsolebash"

따옴표와 관련이 있습니까? 나는 그것들을 사용하지 않아야 하고, 뭔가를 탈출해야 합니까?
나는 시도하고 실행하려고 합니까 bash?
아이디어가 부족하지만 달성할 수 있기를 바랍니다(하지만 제가 놓친 당황스러울 정도로 간단한 것은 아니길 바랍니다).

konsole특히 문제가 있는 경우 다른 터미널 에뮬레이터를 성공적으로 사용하는 답변을 찬성 투표하겠습니다 konsole.

답변1

@n.st의 의견 덕분에 다음과 같은 내용을 만들었습니다.

konsole -e /bin/bash --rcfile <(echo "cd /;ls;echo hi | less")

다음은 bash 프로세스 대체를 사용하여 tmpfiles가 없는 더 짧은 버전입니다.

echo "cd /;ls;echo hi | less" > /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash

일부 명령을 실행하고, 표시하고, 환경을 변경하고, 장기 실행 프로그램을 실행하고( less) 종료되면( :q) 대화형이 됩니다.
따라서 cd /;ls;echo hi | less(데모)를 스크립트로 바꾸십시오.

기록은 없지만 최소한 현재 올바른 디렉터리에 있고 설정하고 싶었던 환경 변수가 있습니다.


기본적으로 이전 시도와 동일합니다.

konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"

파일 쓰기가 konsole실행 외부에 있다는 점을 제외하면 플래그를 삭제했고 -i실행 매개변수가 하나의 인용 블록에 있지 않습니다.


불행하게도 --rcfile스위치로 인해 ~/.bashrc해당 명령이 로드되지 않으므로 별칭이나 다른 것이 필요한 경우 이를 수행해야 합니다.

cat ~/.bashrc > /tmp/konsolebash; echo "commands" >> /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash

그러면 bashrc를 복사합니다.첨부하다당신의 명령을 끝까지

답변2

더 짧고 간단한 솔루션:

konsole -e '$SHELL -c "ls; $SHELL"' &

이것은 역사나 소싱에 문제가 없습니다 .bashrc. $SHELL환경 변수가 bash를 가리키지 않는 경우 수동으로 지정할 수 있습니다.

이렇게 하면 동일한 터미널 창 내에 두 번째(bash) 셸이 생성되므로 첫 번째 명령의 일부 내용이 전달되지 않을 수 있습니다.

askubuntu에서 채택한 답변답변.

관련 정보