ラベル Cygwin の投稿を表示しています。 すべての投稿を表示
ラベル Cygwin の投稿を表示しています。 すべての投稿を表示

2017年2月11日土曜日

CygwinでCドライブに短いパスでアクセスする方法

How to abbreviate path

CywginはWindowsでUnixのような操作ができるコンソールアプリケーションです。
UnixアプリケーションをWindowsで動作させることもでき、GCCやClangやPythonなども動作します。
CygwinからWindowsのファイルシステムへのアクセスもできるのですが、わずかな工夫で効率を上げることができるのでまとめてみました。


環境

  • Windows 10
  • Cygwin


Cywginのルートはインストールしたドライブのルートではない

Cywginのルートパス / はCywginをインストールしたWindowsのフォルダーです。
ルートパスより上の階層にアクセスすることはできません。
blog.fujiu.jp CygwinでCドライブに短いパスでアクセスする方法


Cドライブにアクセスする基本操作

Cドライブにアクセスする方法は

にアクセスすることです。

/cygdrive/ 以下のドライブレターに対応するディレクトリーが各ドライブに対応しています。
Dドライブなら



Cドライブにアクセスするパスを短いシンボリックリンクに設定する

Cドライブにアクセスするたびに /cygwin/c と入力するのは面倒です。
CygwinのルートパスにCドライブへのシンボリックリンクを設定すると「Ubuntu Bash on Windows」のようにアクセスできます。



Dドライブなら

と設定します。


関連ブログ

Visual Studio Code のターミナルを Cygwin に設定する方法
bashスクリプトの変数のスコープにはまったところと対処方法
[GPGPU] 機械学習で画風を変換する方法 [Machine Learning]
[Andriod-NDK] ERROR: You are using a non-Cygwin compatible Make program.

以上、参考になれば幸いです。

2016年7月9日土曜日

Visual Studio Code のターミナルを Cygwin に設定する方法

How to change VScode terminal from cmd.exe to Cygwin Bash

2016年6月、マイクロソフトがオープンソースソフトウェアとして開発・公開しているテキストエディター Visual Studio Code (以下VScodeと略します) のバージョン1.2が公開されました。
このバージョンから「ターミナル」機能が追加されました。
初期設定はVScodeのウィンドウ内でWindowsならコマンドプロンプトが、LinuxやMacならシェルが利用できます。
Windows版VScodeの設定を変更してターミナルからCygwinのBashが使えたのでその方法をまとめました。

blog.fujiu.jp  Visual Studio Code のターミナルをCygwinに設定する方法


環境

  • Windows
  • Visual Studio Code 1.2.0


設定方法

Cygwinは D:\cygwin にインストールされているとします。

VScodeを起動し
ファイル - 基本設定 - ユーザー設定
を開き settings.json に次の1行を追加します。



設定項目が複数ある場合はカンマで区切ります。

blog.fujiu.jp Visual Studio CodeのターミナルをCygwinに設定する方法

これでメニューの
表示 - Toggle Integrated Terminal
をクリックすると画面下半分にCygwinが表示されBashが使えるようになりました。

実際に bashスクリプト のコーディングに使ってみた様子がこちらの画像です。


Cygwinを使うメリット

CygwinはWindows上でPOSIX環境を再現するアプリケーションです。
devカテゴリーを全てインストールと、GCC・Perl・Python・Luaなど広く使われるコンパイラーやプログラミング言語を利用することができます。
ターミナルをCygwinに設定すればVScodeだけでこれらのプログラミング言語をコーディングしデバッグ・実行することがきるようになり、効率化が期待できます。


VScodeのターミナルでCygwinを使うときの注意点

ターミナル操作中にEscキーを押すと、ターミナルのウィンドウが隠れます。
Cygwinでviやvimを起動中にEscキーを押すとターミナルのウィンドウを隠す処理にフックされ、viやvimのモード切替ができませんでした。
VScode利用者がviやvimを使うことはないと思いますが、Escキーの操作がBashに効かない点に注意が必要です。
バージョン 1.3.0で修正されました 2016年7月13日追記

逆に Ctrl+C や Ctrl+V はVScodeにフックされずショートカットキーでのコピー・貼り付けができません

ちなみに、このブログを書いている時点では全角文字(CJK character)がターミナルに正しく表示されません。下の画像は
echo あいうえお
を実行した結果です。
バージョン 1.3.0で修正されました 2016年7月13日追記

そのほか、Cygwinは
  • Unix系の操作を覚える必要がある
    各コマンドやパーミッションなど
  • ファイルのパスの書き方がWindowsと異なる
    例: C:\ は /cygdrive/c/ と書くなど
  • このブログを書いている時点ではCygwinからVScodeの起動ができない
などの特徴があります。


関連ブログ

bashスクリプトの変数のスコープにはまったところと対処方法
Visual Studio Community 2015 をISOファイルからWindows10にインストールする方法
[Android] Xamarin でアプリを作ってみました

以上、参考になれば幸いです。

2016年7月1日金曜日

bashスクリプトの変数のスコープにはまったところと対処方法

The programming pitfalls in variable scope for Bash scripts

bashスクリプトを書いた際、変数が有効なスコープ範囲内にあるはずと思っていたのに値が消えてしまうトラブルにはまってしまいました。
その原因と対処方法をまとめました。


環境

  • Windows 10
  • Cygwin


きっかけは短縮URLの移動先を調べるスクリプト

Twitterのt.coを始め、Google URL Shortenerなど長い文字になりがちなURLを短縮するサービスが広く利用されています。
これらの短縮URLはWebブラウザーなどでクリックすると指定された移動先のURLに移動します。
短縮URLの文字を見ただけでは移動先のサイトは分かりません。
短縮URLの移動先がさらに短縮URLで別の移動先が指定されていることも少なくありません。

そこでCygwinで短縮URLの移動先を再帰的に調べ最後の移動先を表示するbashスクリプトを書いたのですが、変数の値が途中で消えてしまいました。

blog.fujiu.jp bashスクリプトで変数スコープにはまった


curlコマンドをインストールする

curlコマンドが必要です。Cygwin Setupかapt-cygなどでcurlをあらかじめインストールしてください。


失敗したスクリプト

動くはずと思って書いたスクリプトです。


上のスクリプトをファイルに保存しパーミッションを755に設定します。
引数に適当な短縮URLを指定して実行すると、curlコマンドを使って応答ヘッダーを調べます。
移動先が指定されていればそのURLの応答ヘッダーを調べる処理を繰返し、最後の移動先を表示するはずでした。

実際に実行してみると
(1)のstatus変数には間違いなくHTTPステータスが代入されている
(2)のstatus変数は値がカラになっている
という期待を裏切る結果が起きました。


原因

下記サイトを参考にしました。
スマートな紳士のためのシェルスクリプト(8):シェルスクリプト最大の罠、while問題 (1/2)- @IT
http://www.atmarkit.co.jp/ait/articles/1209/14/news147.html
http://www.atmarkit.co.jp/ait/articles/1209/14/news147.html

原因はパイプでつないだ先の変数はパイプ先のみ有効とのことです。
上のスクリプトの場合、パイプでつないだwhile文の内側にある(1)のstatus変数はdoneの直前まで有効ですが、doneより下にある(2)のstatus変数はパイプの外側にあるので別の値を持つ変数だった、ということでした。


解決策

パイプでつないだ先の変数の値を/tmpディレクトリーにファイルとして保存することにしました。


修正したスクリプト

期待通りに動作するように修正したスクリプトがこちらです。


/tmpディレクトリーをRAMディスクに置ければちょっとだけ高速化できそうです。


関連ブログ

[クラウド] BluemixのJavaアプリ開発ではまったところと対処方法
C#のAzure用Webジョブ開発ではまったところ

以上、参考になれば幸いです。

2011年4月16日土曜日

[Andriod-NDK] ERROR: You are using a non-Cygwin compatible Make program.

How to solve the problem about Android-NDK

Androidアプリケーションのネイティブコードを開発するためのAndroid NDKを使ってみたらタイトルのようなエラーが出ました。
WindowsにCygwinをインストールし、ndk-buildのあるフォルダーにパスを通しndk-buildを実行した結果です。


GNU Makeのインストールが必要とのことですが、Cygwinのsetup.exeを実行して確認ししてもちゃんとインストールされています。

原因はndk-buildを保存したフォルダー名にスペースを使っていたことでした。
D:\Program Files\android-ndk-r5b というパスがスペースを含んでいるのでエラーになってしまいます。
(よく見るとエラーメッセージにヒントが表示されています)

"/cygdrive/d/Program Files/android-ndk-r5b/ndk-build"
(ダブルクオーテーションで囲む方法)や
/cygdrive/d/Program\ Files/android-ndk-r5b/ndk-build
(スペースの前に\をつける方法)も試しましたが結果はどちらもエラーでした。

スペースを含まないシンボリックリンクを作ってもエラーが起こりました。
ln -s /cygdrive/d/Program\ Files/android-ndk-r5b/ androkd-ndk
~/androkd-ndk/ndk-build


android-ndk-r5bフォルダーをDドライブ直下(D:\android-ndk-r5b)に移動しパスを設定し直したら解決しました。
フルパスにスペースを含んでいなければエラーになりません。
詳しくはndk-buildのソースを参照してください。

Android SDKはD:\Program Files\以下にインストールしてもパスに関するエラーが起こったことがないのでウッカリしてしまいました。

以上、参考になれば幸いです。