Windows ショートカット ファイル (.LNK) を実行するための Cygwin

Windows ショートカット ファイル (.LNK) を実行するための Cygwin

私は Windows で cmd の代替として Cygwin を使用しており、システム PATH 変数をクリーンアップ中です。

これで、コマンド ラインから使用するすべての小さなアプリとソフトウェアを含む PATH 内の exe ファイルとショートカット (.LNK) ファイルを含むフォルダーが作成されました。

CMDではすべてが機能しますが、ショートカット、.LNKファイルはCygwinでは機能しません。代わりに、

bash: /cygdrive/e/Apps/uniserver.lnk: バイナリファイルを実行できません

私の推測では、.lnk はシンボリックリンクであると考えられているからでしょうか?

Cygwin でショートカットを起動する方法はありますか?

答え1

CygwinからWindows LNKファイルを実行できるcygstartユーティリティは、cygutils パッケージ、 次のように:

cygstart [OPTION]... FILE [ARGUMENTS]

見るcygstart --help利用可能なオプションについては。

あなたの場合は、次の内容で十分でしょう:

cygstart /cygdrive/e/Apps/uniserver.lnk

答え2

.lnk私も同じような設定をしたことがあるのですが、毎回 入力する手間を省けるかと思いました。試してみましたcommand_not_found_handleBash 4.0 で追加され、動作するようです:

# add this to your .bashrc
command_not_found_handle ()
{
    if [[ $1 == *.* || $1 == */* ]]; then
        echo "$1: command not found"
        return 127
    fi

    local binbase=/cygdrive/e/Apps/
    local name=$1
    shift

    # You might want to tweak precedence
    if [[ -f ./$name.bat ]]; then
        exec "./$name.bat" "$@"
    elif [[ -f ./$name.lnk ]]; then
        cygstart "./$name.lnk" "$@"
    elif [[ -f $binbase/$name.bat ]]; then
        exec "$binbase/$name.bat" "$@"
    elif [[ -f $binbase/$name.lnk ]]; then
        cygstart "$binbase/$name.lnk" "$@"
    else
        echo "$name: command not found"
        return 127
    fi
}

たとえば、入力するとuniserver、このフックが起動され、/cygdrive/e/Apps/uniserver.lnk起動するものが検索されます。

編集:$PATH 全体からショートカットを検索する代替手段。

command_not_found_handle ()
{
    if [[ $1 == *.* || $1 == */* ]]
    then
        echo "$1: command not found"
        return 127
    fi

    local name=$1
    shift

    if [[ -f ./$name.bat ]]
    then
        exec "./$name.bat" "$@"
    elif [[ -f ./$name.lnk ]]
    then
        start "./$name.lnk" "$@"
    elif [[ -f $(type -P $name.bat) ]]
    then
        exec "$(type -P $name.bat)" "$@"
    elif [[ -f $(type -P $name.lnk) ]]
    then
        cygstart "$(type -P $name.lnk)" "$@"
    else
        echo "$name: command not found"
        return 127
    fi
}

答え3

DOS 組み込みコマンド を使用しますstart。ただし、Cygwin は DOS 組み込みコマンドにアクセスできないと思われるため、mystart.bat などのラッパーを作成し、そのラッパー スクリプトを使用して LNK を起動する必要があります。

Cygwin で LNK ファイルを「関連付ける」ことで、Cygwin が自動的にラッパーを起動するようになるとは思いませんが、おそらく他の誰かがそれを実行する方法を提案してくれるでしょう。

関連情報