![Windows ショートカット ファイル (.LNK) を実行するための Cygwin](https://rvso.com/image/1417416/Windows%20%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%20(.LNK)%20%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%20Cygwin.png)
私は 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_handle
針Bash 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 が自動的にラッパーを起動するようになるとは思いませんが、おそらく他の誰かがそれを実行する方法を提案してくれるでしょう。