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

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

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

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

標準出力

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

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

VBA

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Q&A

解決済

2回答

1591閲覧

Excel VBA→Cygwin起動→gitの標準エラー出力をファイルにリダイレクト

nayameru

総合スコア8

Cygwin

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

標準出力

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

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

VBA

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

0グッド

0クリップ

投稿2021/09/12 03:34

編集2021/09/12 04:10

Excel VBAからCygwinを起動し、Cygwin上でgitを実行して、その標準エラー出力をファイルにリダイレクトしたいです。

VBA

1Public Sub subClone(projectName As String) 2Dim cd As String 3Dim command As String 4 cd = ThisWorkbook.Path & "\" & projectName 5 command = "git clone https://github.com/aaa/aaa.git 2> gitcln.txt" 6 Call subCyg(cd, command) 7End Sub 8 9Public Sub subCyg(実行パス As String, command As String) 10Dim WSH As WshShell 11Dim wExec As Object 12 Set WSH = New WshShell 13 Call WSH.Run("%ComSpec% /c " & "set LESSCHARSET=utf-8 && cd /d " & 実行パス & " && C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico " & command, 2, True) 14 Set WSH = Nothing 15End Sub

上記コードで以下commandを試しましたがいずれもファイル出力がありません。
どうすれば出力されますでしょうか?
手動でCygwin上で、
git clone https://github.com/aaa/aaa.git 2> gitcln.txt
を実行すれば出力されます。

"git clone https://github.com/aaa/aaa.git > gitcln.txt"
Cygwinのウィンドウにクローンの進捗表示、クローンされる。ファイル出力なし。
"git clone https://github.com/aaa/aaa.git >> gitcln.txt"
Cygwinのウィンドウにクローンの進捗表示、クローンされる。ファイル出力なし。
"git clone https://github.com/aaa/aaa.git 2> gitcln.txt"
Cygwinのウィンドウにクローンの進捗表示、クローンされる。ファイル出力なし。
"git clone https://github.com/aaa/aaa.git > gitcln.txt 2>&1"
Cygwinのウィンドウにクローンの進捗表示、クローンされる。ファイル出力なし。
"git clone https://github.com/aaa/aaa.git >> gitcln.txt 2>&1"
Cygwinのウィンドウにクローンの進捗表示、クローンされる。ファイル出力なし。
"git clone https://github.com/aaa/aaa.git &> gitcln.txt"
Cygwinのウィンドウ出ず。クローンされない。ファイル出力なし。
"git clone https://github.com/aaa/aaa.git &>> gitcln.txt"
Cygwinのウィンドウ出ず。クローンされない。ファイル出力なし。
"git clone https://github.com/aaa/aaa.git >& gitcln.txt"
Cygwinのウィンドウ出ず。クローンされない。ファイル出力なし。
"git clone https://github.com/aaa/aaa.git >>& gitcln.txt"
Cygwinのウィンドウ出ず。クローンされない。ファイル出力なし。
"git clone https://github.com/aaa/aaa.git 2>&1 gitcln.txt"
Cygwinのウィンドウ一瞬出る。クローンされない。ファイル出力なし。

考えてみればgit clone、git checkoutが正常に完了しているかどうかを見たいだけなので、
上記のようなファイルへのリダイレクトという手段でなくても結構です。
よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

実行されるコマンドの後半は、

text

1C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico git clone https://github.com/aaa/aaa.git 2> gitcln.txt

なので、gitcln.txtに書かれるのは、minttyコマンドの標準エラー出力です。
gitコマンドの標準エラー出力をリダイレクトするには、

VBA

1 command = "cmd.exe /c ""git clone https://github.com/aaa/aaa.git 2> gitcln.txt""" 2または、bashにパスが通っていれば、 3 command = "bash -c ""git clone https://github.com/aaa/aaa.git 2> gitcln.txt""" 4でも。

でしょうか。

指摘のあるように、minttyを経由する意味は無いです。

投稿2021/09/12 06:58

otn

総合スコア84702

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

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

nayameru

2021/09/12 10:59

ありがとうございました。
guest

0

ベストアンサー

Call WSH.Run("%ComSpec% /c " & "set LESSCHARSET=utf-8 && cd /d " & 実行パス & " && C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico " & command, 2, True)

なぜminttyの起動が必要なのですか?

VBA

1Call WSH.Run("%ComSpec% /c " & "set LESSCHARSET=utf-8 && cd /d " & 実行パス & " && " & command, 2, True)

これで十分では?

command = "git clone https://github.com/aaa/aaa.git 2> gitcln.txt"

標準エラー出力をファイルに出力したいのならこれでいいのですが、もし標準出力と標準エラー出力の両方をファイルに出力したいという意図なら

VBA

1command = "git clone https://github.com/aaa/aaa.git > gitcln.txt 2>&1"

です。

投稿2021/09/12 04:31

itagagaki

総合スコア8402

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

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

nayameru

2021/09/12 05:16

ありがとうございます。 しかし、それは分かっていました。 事情があって、タイトルの通り、Cygwin経由でないといけないのです。。。
itagagaki

2021/09/12 05:23

失礼ながら「Cygwin経由」とおっしゃっているのが、根本的に何か理解が足りないように思います。 「Cygwin経由」とはどういう意味ですか? 私が言ったのはminttyの起動がなぜ必要なのかという話なのですが。
itagagaki

2021/09/12 05:30

以前にも言いましたが、Cygwinで動くコマンド、Cygwinで生成されたコマンドは、Windowsコマンドです。Cygwin1.dllランタイムライブラリがPOSIXシステムコールの代替となっているだけです。Cygwinという何かWindowsとは別の特別なシステムがあるわけではありません。そしてminttyについてはターミナルの話であってCygwinの話ではありません。
nayameru

2021/09/12 06:13

すみません。 C:\cygwin64\bin\git.exe と C:\Program Files\Git\cmd\git.exe とは違うと思うのですが。 仮にLinux上でしか動作しない実行ファイルだといかがでしょうか?
itagagaki

2021/09/12 06:16

C:\cygwin64\bin\git.exe C:\Program Files\Git\cmd\git.exe どちらもWindowsの実行ファイルです。 CygwinはLinuxではありません。
nayameru

2021/09/12 10:58

何度もご説明いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問