Wine 도구는 파일 경로를 Linux 형식에서 Windows 형식으로 변환합니다.

Wine 도구는 파일 경로를 Linux 형식에서 Windows 형식으로 변환합니다.

나는 내가 찾은 어떤 Linux diff 도구보다 더 나은 Windows diff 도구를 가지고 있습니다(그리고 나는 그것으로 몇 가지 멋진 작업을 수행했습니다).시각적 차이 도구의 광범위한 분석). 저는 이 도구를 Linux(Wine을 통해)에서 사용하고 Linux 파일 경로를 전달할 수 있기를 원합니다. 부분적으로는 Double Commander와 같은 이중 창 파일 관리자가 diff 도구를 호출할 때 전체 파일 경로를 자동으로 전달하기 때문입니다.

그래서 반대로 물어보는데이 문제: Linux 스타일 파일 경로(이스케이프 문자(예: 공백) 포함)를 Windows 스타일 파일 경로(Wine을 통해 실행되는 Windows 도구에서 허용됨)로 변환하는 방법은 무엇입니까?

간단한 예를 들자면,

입력하다:

/경로/to/file1.ext /경로/to/file2.ext

산출

“\경로\to\file1.ext” “\path\to\file2.ext”

bash물론 현실 세계에서는 파일에 공백 등이 있을 수 있으므로 지금까지의 대안보다 더 안정적인 솔루션을 찾고 있습니다 .

#!/bin/bash
p1=$1
p2=$2
wine /utils/wincmp.exe ${p1//\//\\} ${p2//\//\\}

답변1

귀하의 스크립트는 실제로 매우 가깝습니다. winepath변환을 위해 WINE의 일부로 제공되는 도구 만 있으면 됩니다 .

#!/bin/sh
exec wine /utils/wincmp.exe "`winepath --windows \"$1\"`" "`winepath --windows \"$2\"`"

또는 사용로랑 베르코execline:

/명령/execlineb -S2
백틱 -i 왼쪽 { winepath --windows $1 }
백틱 -i 오른쪽 { winepath --windows $2 }
여러 대체 {
    중요한 것들
    중요한 것은 옳은 것입니다
}
와인
/utils/wincmp.exe ${왼쪽} ${오른쪽}

답변2

  1. 언제나변수를 큰따옴표로 묶으면 공백이나 셸 메타문자에 신경 쓸 필요가 없습니다.

  2. sed또는 를 사용하여 s를 .eg 또는 tr로 변환할 수 있습니다 (참고: 쉘 이스케이프 문자이므로 리터럴 백슬래시로 처리하려면 이스케이프해야 합니다)./\sed 's:/:\\:g'tr '/' '\\'\

  3. 또는 bash의 문자열 조작 연산자가 작업을 수행할 수 있습니다(그러나 POSIX 표준이 아니므로 이식 가능하지 않습니다). 당신이 저지른 유일한 실수는 변수를 인용하지 않은 것입니다.

그러나 @Michael Homer가 언급했듯이 경로 구분 기호를 수정할 필요가 없습니다. wine program.exe /unix/path/to/file과거에는 이것을 실행하는 데 확실히 어려움이 없었습니다.

다음으로 이어진다:

#!/bin/bash

p1="$1"
p2="$2"

# optional transformation
p1="$(printf "%s" "$p1" | tr '/' '\\')"
p2="$(printf "%s" "$p2" | tr '/' '\\')"

wine /utils/wincmp.exe "$p1" "$p2"

또는

#!/bin/bash

p1="${1//\//\\}"
p2="${2//\//\\}"

wine /utils/wincmp.exe "$p1" "$p2"

심지어:

#!/bin/bash
wine /utils/wincmp.exe "${1//\//\\}" "${2//\//\\}"

(그러나 마지막 버전에서는 파일 매개변수에 대한 온전성 검사를 수행하거나 모든 종류의 옵션 처리(예: with getopts) 를 수행할 수 있는 기회가 제공되지 않았습니다.)


마지막으로, Windows diff 도구에 대한 선호도를 재고하거나 적어도 결정을 내리기 전에 더 철저하게 조사할 수 있습니다(사용 가능한 도구 및 GUI 래퍼 중 일부만 평가했습니다). Windows/와인 기반 도구는 Linux/UNIX 기반 개발 워크플로에 원활하게 통합되지 않습니다.

(개인적 으로 저는 diff -u주로 . 내가 주로 사용하는 side-side diff ).colordiff -ulessgit diffsdiff

관련 정보