0

WindowsエクスプローラーからコピーされたWindowsディレクトリにcdするcygwinのスクリプトを書くことを考えています。

例えば

cdw D:\working\test

に等しい

cd /cygdrive/d/working/test

'D:\working\test'ただし、シェルスクリプトの場合は、一重引用符または二重バックスラッシュを使用しない限り、パラメータのすべてのバックスラッシュは無視されますD:\\working\\test

しかし、私の場合、コマンドラインにディレクトリ名を貼り付けてスクリプトを実行することはできないため、非常に不便です。

動作させる方法はありますcdw D:\working\testか?

4

3 に答える 3

5

まあ、あなたはそれをすることができます、しかしあなたは何か奇妙なものが欲しいです:)

cdw()
{
    set $(history | tail -1 )
    shift 2
    path="$*"
    cd $(cygpath "$path")
}

使用例:

$ cdw D:\working\test
$ pwd
/cygdrive/d/working/test

ここでの要点は、の使用法ですhistory。引数を直接使用するのではなく、入力された形式の履歴から取得します。

$ rawarg() { set $(history | tail -1 ); shift 2; echo "$@"; }
$ rawarg C:\a\b\c\d
C:\a\b\c\d

もちろん、このトリックはインタラクティブシェルでのみ使用できます(明らかな理由で)。

于 2012-08-06T08:47:07.620 に答える
1

あなたが扱う問題はシェルに関連しています。コマンドラインでcdwに追加した引数は、実行される cdwにシェルによって処理されます。

その処理が発生しないようにするには、文字列全体を一重引用符で囲むことにより、少なくとも1レベルの引用符が必要です。

cd 'D:\working\test'

またはダブルバックスラッシュ付き:

cd D:\\working\test

別のプログラムは、実行前にすでに損傷が発生しているため、役に立ちません。;-)

ただし、ASTUWINkshで機能する可能性がありますfunctioncdw

function cdw { typeset dir
    read -r dir?"Paste Directory Path: "
    cd ${dir:?}
}

そしてこれはBashで動作します(readvar?promptをサポートしていません):

function cdw {
    typeset dir
    printf "Paste Directory Path: "
    read -r dir || return
    cd ${dir:?}
}

私の場合、Pasted値を囲む2つの一重引用符を入力するだけです。

于 2012-08-05T10:16:36.470 に答える
0

一重引用符を追加するソリューションでは、コピーして貼り付けることができます

于 2012-08-05T07:55:32.063 に答える