質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

1回答

2986閲覧

Excel VBA→Cygwin起動→clocの出力を取得したい

nayameru

総合スコア8

Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2021/09/23 07:28

何度もすみません。
gitについては、
https://teratail.com/questions/359060
で良かったのですが、
今度は、clocというツールの出力を取得したいです。
Windows版のcloc.exeは不具合があり使えず、
C:\cygwin64\bin\cloc
を使う必要があります。
Windowsのコマンドプロンプトで、

%ComSpec% /c set LESSCHARSET=utf-8 && C:\cygwin64\bin\mintty.exe cloc --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt

とすると、
minttyのターミナル上でclocが実行されるのですが、
https://teratail.com/questions/359060
のotnさんのご指摘の通り、
clocres.txtはminttyの出力となり(出力なし)、
これも、otnさんのご指摘の通り、

%ComSpec% /c set LESSCHARSET=utf-8 && C:\cygwin64\bin\mintty.exe "cloc --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt"

とすると、minttyのターミナル上で、

cloc --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt: Exit 126. Failed to run 'cloc --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt': No such file or directory

となり、clocも実行されません。
どうすればよろしいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

C:\cygwin64\bin\cloc.exeもWindows実行ファイルですからそのまま他のWindows実行ファイルと同じように実行すればいいだけです。
minttyは必要ありません。

投稿2021/09/23 07:37

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nayameru

2021/09/23 07:45

C:\cygwin64\bin\cloc はWindows実行ファイルではありません(exeファイルではありません)。 cloc.exeは別にリリースされており、不具合があり使えません。 知識不足で言い方が間違っていると思いますが、 cygwin64配下の環境では不具合なく動きます。
itagagaki

2021/09/23 07:52 編集

exeでなければシェルスクリプトですか? シェルスクリプトなら C:\cygwin64\bin\bash /bin/cloc という形で実行してください。
nayameru

2021/09/23 12:38

取り急ぎですが、ダメですね。 %ComSpec% /c set LESSCHARSET=utf-8 && C:\cygwin64\bin\bash /bin/cloc --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt /bin/cloc: line 32: my: command not found /bin/cloc: line 33: my: command not found /bin/cloc: line 34: require: command not found /bin/cloc: line 36: use: command not found /bin/cloc: line 37: use: command not found /bin/cloc: line 39: use: command not found /bin/cloc: line 40: use: command not found /bin/cloc: line 41: use: command not found /bin/cloc: line 42: use: command not found /bin/cloc: line 43: use: command not found /bin/cloc: line 44: use: command not found /bin/cloc: line 45: use: command not found /bin/cloc: line 46: syntax error near unexpected token `(' /bin/cloc: line 46: `use List::Util qw( min max );' clocのファイルは、 https://github.com/AlDanial/cloc/releases の cloc-1.90.tar.gz を解凍すれば入手できます。
itagagaki

2021/09/23 13:28

clocの中身を見ればわかることですが、これはperlスクリプトです。 1行目の #!/usr/bin/env perl をシェバンと言って、起動してスクリプトを読み込むインタプリタの指定になっています。直接perlを指定せずにenvを経由させているのはなぜなのかわかりませんが、perlの起動パスを環境変数PATHに依存させるためかもしれません。 というわけで、基本的にはコマンドラインはこうなります。 %ComSpec% /c set LESSCHARSET=utf-8 && C:\cygwin64\usr\bin\env perl <clocのパス> --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt <clocのパス>はclocの完全パスです。その記述の仕方はperlの仕様によります。 perlがWindowsパスを理解するものであるなら、<clocのパス>は C:\cygwin64\bin\cloc です。 Cygwinパスを理解するものであるなら、/bin/cloc です。 それから、上記のコマンドラインでperlがきちんと動くためには、Windowsの環境変数Pathにperlのパスが含まれている必要があります。もしくは上記のコマンドラインのperlの部分を完全パスで書くかです。その場合、CygwinのenvはそのパスをCygwinパスとして解釈しますので、たとえば C:\perl\bin\perl なら /cygdrive/c/perl/bin/perl と書く必要があります。しかしperlのパスを完全パスで書くならenvを経由する必要もなくなると思いますので、コマンドラインはこうできます。 %ComSpec% /c set LESSCHARSET=utf-8 && C:\perl\bin\perl <clocのパス> --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt 結局、clocはperlスクリプトなのでCygwinは関係ないことになります。 (perlがCygwinに依存するバージョンなら別ですが)
itagagaki

2021/09/23 13:30

あと、一応 set LESSCHARSET=utf-8 && は残したままにしましたが、必要ではない気がします。 %ComSpec% /c C:\perl\bin\perl <clocのパス> --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt
nayameru

2021/09/24 02:08

いつもご丁寧に教えて下さりありがとうございます。助かります。 しかし、clocは動き出しましたが、FailedもしくはErrorとなります。 Windowsの環境変数Pathに、 C:\cygwin64\bin を追加。 %ComSpec% /c C:\cygwin64\bin\perl /bin/cloc --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt Failed to create tarfile of files from git. at /bin/cloc line 5161. %ComSpec% /c C:\cygwin64\bin\env perl /bin/cloc --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt Failed to create tarfile of files from git. at /bin/cloc line 5161. git.exeが存在する、 C:\Program Files\Git\cmd が環境変数Pathに設定されていたので削除。 git.exe、tar.exe、unzip.exe、cloc、perl.exeはいずれも、 C:\cygwin64\bin に存在する。 %ComSpec% /c C:\cygwin64\bin\perl /bin/cloc --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt tar.exe: Error opening archive: Failed to open '/tmp/gikjgFI2LN.tar' %ComSpec% /c C:\cygwin64\bin\env perl /bin/cloc --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt tar.exe: Error opening archive: Failed to open '/tmp/HaYf5471Q9.tar' minntyのターミナル上でclocの結果は目に見えていますので、それを取り込むことを考えた方が早い気がしてきました。
itagagaki

2021/09/24 07:28 編集

ターミナルはターミナルです。あなたがターミナルの中で見ているのはシェル(おそらくbash)の出力です。 コマンドからの出力のリダイレクト > clocres.txt を実現するために、やむなくシェルとして %ComSpec% (おそらくcmd.exe)を使ってきましたが、それをbashに変えて、.bash_loginも読ませて、ターミナルの中で動かしていたbashとまったく環境を同じにして実行してみればよいでしょう。 C:\cygwin64\bin\bash -lc "cloc --by-file --csv 4d54f02c0ca1d460e1646d2ec4f62f72f5678e1b > clocres.txt" -l を指定することでログインシェルとなり ~/.bash_profile が読み込まれます。 -c で、続く引数をコマンドラインとして実行します。 bashに与えるコマンドラインを " で囲むのを忘れないようにしてください。 ※VBAからこのコマンドをどうやって起動するのかによって、引数のクオートやエスケープの仕方は上記のやり方とは違ってくるかもしれません。
nayameru

2021/09/26 04:52 編集

ありがとうございました。本質を理解できておらず惑わされていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問