Windows의 Ubuntu에서 Bash 또는 Linux for Windows Subsystem (WSL)을 사용하여 파일을 .sh 스크립트로 끌어서 놓을 수 있습니까?


2

여러 파일을 스크립트 파일 위로 드래그하여 Windows 10에서 .sh 스크립트의 매개 변수로 여러 파일을 전달하고 싶습니다. 이것이 가능한가?



@Ramhound이 링크의 질문 superuser.com/questions/1260528/… 이 중복으로 간주 될 수 있지만,이 중 하나 (드래그 앤 드롭)가 중복되는 것에 동의하지 않습니다. 해결 방법은 동일하지만 문제는 해결하고자하는 사용자 검색은
— Alex Sim

기존 질문에 대한 답변이 중재자가 설명한대로 다른 새 질문에 답변하면 해당 질문은 다른 질문의 복제본으로 간주 될 수 있습니다. 나는 그 중재자가 할 수없는 일을하고 있습니다. 왜냐하면 그들이이 질문을 닫기로 투표하면 구속력이 있기 때문입니다. 커뮤니티에 배치 한 딜레마는 중복 답변을 여러 질문에 제출해서는 안되는 이유입니다.
— Ramhound

답변:


1

Windows 10 (v1607 이상)은 여전히 ​​기본적으로이 기능을 제공하지 않습니다.

다행히 레지스트리 키를 사용하여 활성화 할 수 있습니다 (아래 제공).

이 키를 사용하면 .sh 스크립트를 bash.exe에 연결할 수 있으므로 스크립트를 두 번 클릭해도됩니다.

https://www.codeproject.com/Articles/1214365/Proper-Bash-scripting-on-Windows-Associate-SH-scri (업데이트 : Ubuntu, OpenSUSE 및 레거시 설치를위한 새로운 아이콘 옵션 추가)

이 키를 사용하면 스크립트를 사용자 및 고급 모드 (두 번 클릭하면 후자가 오른쪽 클릭 옵션)에서 실행되는 옵션을 사용할 수 있으며 추가 (선택 사항) 키를 사용하면 오른쪽 클릭> 나노 편집

Windows Subsystem for Linux.sh 파일을 열려면 먼저 설치 하고 기본 프로그램으로 설정해야합니다 (프로그램 경로는 C : /Windows/System32/bash.exe).

기본 레지스트리 키는 다음 스크립트를 실행합니다

#This makes bash.exe silently execute the command below (whole code)
"%SYSTEMROOT%\System32\bash.exe" -c

#Gets all file paths without expansion/substitution
read -r -d '' path_param <<'EOF'
%*
EOF
read -r -d '' path_exec <<'EOF'
%L
EOF

#Parses all dragged files' paths from Windows paths to unix paths
path_param=$(echo $path_param | tr -d '"' | sed 's/[[:space:]]\([A-Z]:\)/\n\1/g' | sed 's/[A-Z]:/\/mnt\/\L&/g' | tr '\\' '\/'\');
mapfile -t path_param <<< "$path_param";
path_param=("${path_param[@]//:}");

#Same, but with the .sh script path
path_exec=$(echo $path_exec | sed 's/[[:space:]]\([A-Z]:\)/\n\1/g' | sed 's/[A-Z]:/\/mnt\/\L&/g' | tr '\\' '\/'\'); 
path_exec="${path_exec//:}";

#Sets working directory to the folder where the script is located
cd "${path_exec%\/*}";

#Executes script with or without parameters
if [[ ${path_param[@]} == "" ]];
    then "$path_exec";
    else "$path_exec" "${path_param[@]/#${path_exec%\/*}\/}";
fi;

#Leaves WSL console open after the .sh script finishes executing
cd ~; bash;

이 키는 WSL의 이전 버전과 새 버전 모두에서 작동합니다 (실행 파일 경로가 여전히 C : /Windows/System32/bash.exe 인 경우 확인할 수 있습니까? 여전히 업데이트 1709를받지 못했음)
— Alex Sim

그런데 @Ramhound, 좀 구글 검색을 수행하고이 MS의 페이지를 발견했습니다 msdn.microsoft.com/en-us/commandline/wsl/faq 는 파일 인 경우 WSL 실행 파일이 여전히 Bash.exe라고 말한다 여전히 System32에 있지만 키는 WSL에서도 작동 할 가능성이 높습니다. 다시 한 번, 여기서 생각합니다. Media Creation Tool을 통해 업데이트를 설치하고 사용해보십시오
— Alex Sim

@Ramhound 죄송합니다. 그 단어는 좋지 않습니다. 내가 의미하는 바는 Bash / WSL이 여전히이 기능을 제공하지 않는다는 것입니다. 핵심은 Windows 파일 경로를 해당 Linux 경로로 구문 분석하고 스크립트의 매개 변수로 전달하기 위해 bash 스크립트를 자동으로 실행하는 것입니다.
— Alex Sim

@Ramhound 방금이 medium.com/@finnzeit/…를 찾았 습니다 . 분명히 (내 이해에서) 여전히 bash.exe 실행 파일이 있지만 기본 쉘을 자동으로 실행하는 wsl.exe 실행 파일도 있습니다. 이 경우, 내 레지스트리 키는 여전히 작동,하지만 새로운 wsl.exe 파일 작업을 개선 할 수
— 알렉스 심

1
여러 질문에 동일한 답변을 게시하지 마십시오. 동일한 정보가 실제로 두 질문에 모두 답변하는 경우 한 질문 (보통 새로운 질문)은 다른 질문과 중복하여 닫아야합니다. 다음과 같은 방법으로이를 표시 할 수 있습니다 중복으로 닫 투표 또는, 당신이 충분한 명성을하지 않은 경우, 플래그 인상 이 중복의 것을 나타냅니다. 그렇지 않으면이 질문에 대한 답을 맞추고 동일한 대답을 여러 곳에 붙여 넣지 마십시오.
— DavidPostill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.