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

出力

“\path\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主に。私が主に使用するサイドサイドディフ)。colordiff -ulessgit diffsdiff

関連情報