별도의 Konsole에서 명령을 실행한 다음 사용자가 명령을 입력하도록 합니다.

별도의 Konsole에서 명령을 실행한 다음 사용자가 명령을 입력하도록 합니다.

저는 대기업의 소프트웨어 분야에서 일하고 있으며 사용하고 있는 전반적인 기술에 대한 통제력이 거의 없기 때문에 제가 갖고 있는 제약 내에서 작동하는 솔루션을 찾아야 합니다.

내가하고있는 것:저는 사용자가 작업 중인 프로젝트를 기반으로 특정 환경에서 konsole을 시작할 수 있는 UI를 개발 중입니다. 현재 사용자가 많은 수의 매개변수를 사용하여 Konsole에서 수동으로 실행할 수 있는 명령("setContext"라고 함)이 있습니다. setContext는 많은 작업을 수행하고 많은 환경 변수를 설정합니다. 제한 사항의 일부로 konsole, tcsh 및 setContext 명령을 사용해야 합니다. 내 UI에서 해야 할 일은 올바른 매개변수를 사용하여 setContext 명령을 작성하고, konsole을 열고, 사용자 제어 후 사용자를 위해 명령을 실행하는 것뿐입니다.

내가 생성하는 명령은 다음과 같습니다.

konsole -e tcsh -c "setContext --someArgs"

이 방법은 작동하지만 즉시 콘솔을 닫습니다. --noclosekonsole을 시작할 때 이 옵션을 사용하면 열려 있지만 대화형이 아닌 상태로 유지할 수 있습니다.

이 문제에 대해 일반적으로 받아들여지는 해결책은 ;bash명령 끝에 또는 를 추가하는 것입니다. 제 경우에는 .;$SHELL;tcsh

이는 다음 링크 및 기타 여러 링크에서 제안된 내용입니다.

이는 콘솔을 열어두기 때문에 거의 작동합니다. 사실 이것은 지금까지 몇 주 동안 아무 문제 없이 사용해왔는데, tcsh모든 초기화 파일(~/.cshrc 등)을 다시 가져온 후 실행한 후에 이것이 재설정되는 것을 발견했습니다.setContextsetContext

이는 수백 명의 사용자를 대상으로 작동해야 하며 cshrc 파일을 제어할 수 없으므로 해당 파일을 다시 가져오지 않고 konsole을 열어 둘 수 있는 방법을 찾아야 합니다. 시도해 보았지만 tcsh -f환경을 보호하지는 않습니다.

오후 내내 온라인으로 검색했지만 해결책을 찾지 못했습니다. 환경과 명령을 이해하지만 전문가는 아니며 주로 Python으로 작업합니다. 내가 찾은 모든 것이 위 답변의 재해시이거나 cshrc 파일 수정이 필요하거나 내 수준보다 훨씬 높아서 해독할 수 없기 때문에 여기에 묻습니다.

미리 감사드립니다.

답변1

모든 초기화 파일(등)을 다시 가져온 후 실행 tcsh하면 .setContext~/.cshrcsetContext

환경 변수를 원래 값으로 재설정된 가 포함된 다른 디렉터리로 지정하고 tcsh사용자의 또는 을 가져온 다음 .~/.cshrcHOME.cshrcHOME~/.tcshrc~/.cshrcsetContext

예를 들어, /fake/home미끼용 홈 디렉터리로 사용하려면 다음을 수행하세요.

konsole -e sh -c 'REAL_HOME=$HOME HOME=/fake/home exec tcsh'

포함하다 /fake/home/.cshrc:

setenv HOME "$REAL_HOME"
if (-f ~/.tcshrc) then
   source ~/.tcshrc
else if (-f ~/.cshrc) then
   source ~/.cshrc
endif
setContext
# other aliases and initializations

예, 그것은 끔찍한 패치워크입니다. 더 나은 것을 찾으세요 ;-)

답변2

나와 같은 상황에 있는 다른 사람들을 위해 공유하고 싶은 가능한 해결 방법은 qdbus다른 konsole 인스턴스를 사용하여 명령을 보내는 것입니다.

내 경우에는 Konsole의 pid를 알아야 했기 때문에 다소 복잡할 수도 있지만 작동했습니다.

나는 user431397의 방법을 사용하게 될 것이라고 생각합니다. 왜냐하면 qdbus는 종종 명령을 보낼 때 경고를 표시하기 때문입니다. 경고는 다시 컴파일하여 제거할 수 있지만 그것은 제가 할 수 있는 일이 아니며 경고는 나를 짜증나게 합니다.

저도 dbus 조사하다가 알게 됐는데 yakuake여기에 설치되는 것으로 알고 있는데, konsole보다 qdbus로 제어하기가 더 쉽습니다.

관련 정보