LoginSignup
2
3

More than 3 years have passed since last update.

Windowsのバッチファイル、シェルスクリプトでハマったところ

Posted at

今回のテーマ

 前回までの記事でSalesforceの開発組織から自動でメタデータを取得して、バックアップを取るツールを紹介しました。そのツールの作成にあたって、非常に苦労したbatファイルに関して、書いていこうと思います。

前回までの記事

batファイルで実行したかったこと

 まず、上記のツールを作成する上でやりたかったことは以下の通り。
・SF組織からメタデータを取得する
・差分をGitCommitする(差分がなければ空コミットする)

とても単純でcmdから実行するには以下のコマンドを順番通り実行すれば、想定通り動作する

cd targetdirectory
sfdx force:source:retrieve -u username@mail.com
git add --all
git commit --allow-empty -m"message"

とても単純なので、上記を実行するバッチファイルを作成

backupSFmeta.bat
sfdx force:source:retrieve -u username@mail.com
git add --all
git commit --allow-empty -m"message"

そしてのこのファイルを実行すると....
なぜか失敗する。SF組織からメタデータを取得するところまでは、そのあとの処理で落ちる。

原因

 上記のバッチファイルのように、1つずつのコマンドを実行させると、sfdxの実行後にcmdが実行完了で、
終了してしまっていた。全てのコマンドを1タスクとして実行させるように以下のように記述することで、
sfdxコマンド後にcmdが終了することを回避できた。

backupSFmeta.bat
sfdx force:source:retrieve -u username@mail.com & git add --all & git commit --allow-empty -m"message"

他に起きたこと・試したこと

 

1.
windows.batではGitコマンドは使えないのかと思って色々調べたら、batファイルと同様のshファイルをGit bashに渡してあげれば
上手くいくという記事を見つけたので下記のようなことを試しました。

backupSFmeta.bat
sfdx force:source:retrieve -u username@mail.com
git-bash C/Users/user Name/Desktop/sforg/commit.sh
git add --all
git commit --allow-empty -m"message"
commit.sh
cd targetdirectory
git add --all
git commit --allow-empty -m"message"

ここでの問題点
上記のファイルではgit-bashコマンドに引数で渡しているファイルが実行されません。git-bashに引数として渡す実行ファイルを指定する際は

git-bash "C/Users/user Name/Desktop/sforg/commit.sh"

のようにダブルクオートでくくって上げる必要があります。

2.
windows.bat実行後に、結果が出力されると次のコマンドが実行されないのではないこと思い「@echo off」を付けましたが、
やはり最初のコマンド実行後cmdが終了してしまいました。
上記のように「&」で各コマンドを繋げるしかないようです。

結論

 コマンドを「&」で繋げないと、最初のコマンドで終了してしまうことがあるという記事が、
なかなか見当たらず、今回はかなり苦労しました。どなたかの役に立てば幸いです。

参考
https://www.adminweb.jp/command/action/index1.html

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3