저는 대기업의 소프트웨어 분야에서 일하고 있으며 사용하고 있는 전반적인 기술에 대한 통제력이 거의 없기 때문에 제가 갖고 있는 제약 내에서 작동하는 솔루션을 찾아야 합니다.
내가하고있는 것:저는 사용자가 작업 중인 프로젝트를 기반으로 특정 환경에서 konsole을 시작할 수 있는 UI를 개발 중입니다. 현재 사용자가 많은 수의 매개변수를 사용하여 Konsole에서 수동으로 실행할 수 있는 명령("setContext"라고 함)이 있습니다. setContext는 많은 작업을 수행하고 많은 환경 변수를 설정합니다. 제한 사항의 일부로 konsole, tcsh 및 setContext 명령을 사용해야 합니다. 내 UI에서 해야 할 일은 올바른 매개변수를 사용하여 setContext 명령을 작성하고, konsole을 열고, 사용자 제어 후 사용자를 위해 명령을 실행하는 것뿐입니다.
내가 생성하는 명령은 다음과 같습니다.
konsole -e tcsh -c "setContext --someArgs"
이 방법은 작동하지만 즉시 콘솔을 닫습니다. --noclose
konsole을 시작할 때 이 옵션을 사용하면 열려 있지만 대화형이 아닌 상태로 유지할 수 있습니다.
이 문제에 대해 일반적으로 받아들여지는 해결책은 ;bash
명령 끝에 또는 를 추가하는 것입니다. 제 경우에는 .;$SHELL
;tcsh
이는 다음 링크 및 기타 여러 링크에서 제안된 내용입니다.
- https://askubuntu.com/questions/20330/how-to-run-a-script-without-fitting-the-terminal/1209836#1209836
- https://askubuntu.com/questions/46627/how-can-i-make-a-script-that-opens-terminal-windows-and-executes-commands-in-the
- 터미널에서 명령을 실행하고 추가 명령을 입력하겠습니다.
- https://askubuntu.com/questions/484993/run-command-on-anothernew-terminal-window
이는 콘솔을 열어두기 때문에 거의 작동합니다. 사실 이것은 지금까지 몇 주 동안 아무 문제 없이 사용해왔는데, tcsh
모든 초기화 파일(~/.cshrc 등)을 다시 가져온 후 실행한 후에 이것이 재설정되는 것을 발견했습니다.setContext
setContext
이는 수백 명의 사용자를 대상으로 작동해야 하며 cshrc 파일을 제어할 수 없으므로 해당 파일을 다시 가져오지 않고 konsole을 열어 둘 수 있는 방법을 찾아야 합니다. 시도해 보았지만 tcsh -f
환경을 보호하지는 않습니다.
오후 내내 온라인으로 검색했지만 해결책을 찾지 못했습니다. 환경과 명령을 이해하지만 전문가는 아니며 주로 Python으로 작업합니다. 내가 찾은 모든 것이 위 답변의 재해시이거나 cshrc 파일 수정이 필요하거나 내 수준보다 훨씬 높아서 해독할 수 없기 때문에 여기에 묻습니다.
미리 감사드립니다.
답변1
모든 초기화 파일(등)을 다시 가져온 후 실행
tcsh
하면 .setContext
~/.cshrc
setContext
환경 변수를 원래 값으로 재설정된 가 포함된 다른 디렉터리로 지정하고 tcsh
사용자의 또는 을 가져온 다음 .~/.cshrc
HOME
.cshrc
HOME
~/.tcshrc
~/.cshrc
setContext
예를 들어, /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를 알아야 했기 때문에 다소 복잡할 수도 있지만 작동했습니다.
- https://docs.kde.org/stable5/en/applications/konsole/scripting.html
- https://www.linuxjournal.com/content/start-and-control-konsole-dbus
나는 user431397의 방법을 사용하게 될 것이라고 생각합니다. 왜냐하면 qdbus는 종종 명령을 보낼 때 경고를 표시하기 때문입니다. 경고는 다시 컴파일하여 제거할 수 있지만 그것은 제가 할 수 있는 일이 아니며 경고는 나를 짜증나게 합니다.
저도 dbus 조사하다가 알게 됐는데 yakuake
여기에 설치되는 것으로 알고 있는데, konsole보다 qdbus로 제어하기가 더 쉽습니다.