수정해야 할 오류가 있는 경우 종료 후에도 열어 두어야 하는 .desktop 빌드 스크립트가 있습니다. Windows에서는 cmd /k script.bat
종료 후에도 cmd 창을 열어 두는 /k를 실행합니다 .
Linux에서 내 솔루션은 "컴파일" 명령과 끝에 "bash" 명령이 포함된 bash 스크립트를 만드는 것이었습니다. .desktop 파일은 bash 명령 덕분에 완료된 후에도 열려 있는 스크립트를 호출합니다.
단일 파일로 이를 수행할 수 있는 방법이 있습니까? 그렇다면 단일 명령(예: bash에 대한 명령줄 인수를 통해)으로 다음 중 하나를 수행해야 합니다.
시작하기 전에 bash가 명령을 실행하도록 합니다(Windows의 cmd /k 명령과 동일).
특정 디렉터리에서 bash를 시작합니다(해당 디렉터리가 열릴 때 트리거되도록 컴파일을 구성할 수 있습니다).
명령을 실행한 후 .desktop 파일을 열어 두십시오(오류가 있는 경우 수정하려면 두 번째 창을 열어야 하므로 이는 가장 권장되지 않습니다).
이 중 하나가 가능한지 알려주십시오.
답변1
나는 방법을 찾았습니다. 일부 Stackexchange 사이트에서 얻었지만 찾을 수 없습니다.
어쨌든 bash의 --init-file
옵션을 남용할 수 있습니다. .bashrc 대신 다른 시작 스크립트로 재정의되도록 의도되었지만 거기에는 무엇이든 넣을 수 있습니다. 익명 파이프와 결합하면 다음을 수행할 수 있습니다.
bash --init-file <(echo "your --command --here")
명령이 끝나면 bash로 돌아갑니다. 다른 솔루션과 같은 새로운 bash 인스턴스가 아니라 동일한 인스턴스입니다.
물론 이것이 목적이기 때문에 .bashrc를 건너뜁니다 --init-file
. 이 문제를 해결하려면 매우 친절해질 것입니다.
bash --init-file <(echo ". \"$HOME/.bashrc\"; your --command --here")
추악하지만 작동합니다 :-)
Linux용 Windows 하위 시스템
마지막으로 Windows에서 이 작업을 시도했지만 문제가 발생했습니다.시작 bash
Linux용 Windows 하위 시스템을 호출하려면 여전히 Windows 환경에 있으므로 익명 파이프가 작동하지 않고 $HOME이 잘못되었습니다. 내 "cmd /k, 하지만 Linux용 Windows 하위 시스템을 시작하는 경우" 해결 방법은 다음과 같습니다.
bash -c 'exec bash --init-file ^<(echo ". \"$HOME/.bashrc\"; your --command --here")'
^
이스케이프 문자에 유의하세요 <
. 이는 bash( bash -c
)를 시작하고 exec
현재 bash 프로세스를 새로운 bash 프로세스( )로 즉시 대체합니다. 이 프로세스는 이전에 설명한 대로 이제 Linux 내에서 초기화되는 bash 프로세스이기도 합니다.
bash-k.cmd
다음 내용으로 쉽게 호출할 수 있도록 PATH에서 호출되는 배치 파일을 만들었습니다 .
@bash -c 'exec bash --init-file ^<(echo ". \"$HOME/.bashrc\"; %*")'
내가 할 수 있게 해주고 bash-k cowsay hello
일이 잘 풀릴 거야
답변2
@skrebbel에게 감사드립니다. 이것은 매우 유용한 명령입니다. 여기에 Bash Console Here
마우스 오른쪽 버튼 클릭 상황에 맞는 메뉴를 추가하는 .reg 파일 코드가 있습니다.Linux용 Windows 하위 시스템
context.reg 추가:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\BashConsoleHere]
@="Bash Console Here"
"Icon"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,00,41,\
00,54,00,41,00,25,00,5c,00,6c,00,78,00,73,00,73,00,5c,00,62,00,61,00,73,00,\
68,00,2e,00,69,00,63,00,6f,00,00,00
[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\BashConsoleHere\command]
@="bash -c 'exec bash --init-file <(echo \". \"$HOME/.bashrc\"\")'"
[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\shell\BashConsoleHere]
@="Bash Console Here"
"Icon"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,00,41,\
00,54,00,41,00,25,00,5c,00,6c,00,78,00,73,00,73,00,5c,00,62,00,61,00,73,00,\
68,00,2e,00,69,00,63,00,6f,00,00,00
[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\shell\BashConsoleHere\command]
@="bash -c 'exec bash --init-file <(echo \". \"$HOME/.bashrc\"\")'"
[HKEY_CLASSES_ROOT\Drive\shell\BashConsoleHere]
@="Bash Console Here"
"Extended"=""
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Drive\shell\BashConsoleHere\command]
@="bash -c 'exec bash --init-file <(echo \". \"$HOME/.bashrc\"\")'"
실행 취소.reg:
Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\BashConsoleHere]
@="Bash Console Here"
"Icon"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,00,41,\
00,54,00,41,00,25,00,5c,00,6c,00,78,00,73,00,73,00,5c,00,62,00,61,00,73,00,\
68,00,2e,00,69,00,63,00,6f,00,00,00
[-HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\BashConsoleHere\command]
@="nircmd elevate cmd /c cd \"%V\" && bash.exe"
[-HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\shell\BashConsoleHere]
@="Bash Console Here"
"Icon"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,00,41,\
00,54,00,41,00,25,00,5c,00,6c,00,78,00,73,00,73,00,5c,00,62,00,61,00,73,00,\
68,00,2e,00,69,00,63,00,6f,00,00,00
[-HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\shell\BashConsoleHere\command]
@="nircmd elevate cmd /c cd \"%1\" && bash.exe"
[-HKEY_CLASSES_ROOT\Drive\shell\BashConsoleHere]
@="Bash Console Here"
"Extended"=""
"NoWorkingDirectory"=""
[-HKEY_CLASSES_ROOT\Drive\shell\BashConsoleHere\command]
@="nircmd elevate cmd /c cd \"%1\" && bash.exe"