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.