CouchDBに興味を持ったのでいじってみようかな、と思って、CouchDBの操作にcurl使ってる記事が多いので、curl導入しようかな、と思ったらつまづいたのでメモ。
PowerShellでcurlを呼ぶとデフォルトではcurlでない似た何かが呼び出される
まず最初に
ここ
の一番下からcurlのWindows x86-84版zipを入手して、環境変数を設定し、
curl -X GET
と動かしたら、-Xってなんぞや?、ってみたいなのが英語で返ってきたので違和感。
curl --help
してもそんなようなことを返されたので、これはおかしいぞ、ということで「curl windows」と調べた。
そうすると、
curlコマンドはPower ShellではInvoke-WebRequestが呼び出されるらしい(wgetもそうらしい)。 対処法を探しにこの記事にリンクがあった、下のサイトへ。
Power Shellのよくわからんやつ(Invoke-WebRequest)を使いたくないので、恒久的に関連付けを切ろうと対処その3をすすめた。 %HOMEPATH%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1を編集するらしいが存在しない。
Microsoft.PowerShell_profile.ps1を編集してみた
調べ進めると、
この記事を見つけた。記事に従って
PS> $profile
でMicrosoft.PowerShell_profile.ps1の居場所をPSに聞き、
PS> new-item -path $profile -itemtype file -force
で強引にファイルを作った。
また、前の記事の戻って、Microsoft.PowerShell_profile.ps1に
del alias:curl
と記述して保存。 そしてPowerShellを再起動。しかし、
. : このシステムではスクリプトの実行が無効になっているため、ファイル %HOMEPATH%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 を読み込むことができません。詳細については、「about_Exec ution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
と出た。
Shellの実行権限関連のエラー
またいろいろ調べてみると、
なるほど。どうも、権限のエラーらしい。ということで、
PS> powershell -ExecutionPolicy RemoteSigned .\Microsoft.PowerShell_profile.ps1
を実行。しかし、
del : パス 'Alias:\curl' が存在しないため検出できません。 + del alias:curl + ~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Alias:\curl:String) [Remove-Item], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
と出る。
結論 del alias:curlは古かった
この原因を2,30分くらい探していたら、
上の記事を発見。どうも、
del alias:curl
と書くのは古いらしく、最近ではsal
で変更できるらしい。
ただ、salも永続的に設定を保存してくれるわけではなさそうで、
上の記事のMicrosoft.PowerShell_profile.ps1をcurl.exeのある場所に値を一部替えれば出来るはず…。
まだPowerShellでは成功するもののHyperでは権限関連でエラーが。再起動しても上手くいかない…
感想
M$さん、破壊的変更はやめてくれ… あと、PowerShellはcmdよりエラーが分かり難いイメージがすごいですね…今更ながら。curl軽く使うくらいなら普通にWSLインストールすればよかったなぁ、って今では結構後悔。 CouchDBの話はまた別の機会にでも。