[解決済み] 複数のLinuxコマンドを1行でまとめて実行する
質問
複数のLinuxコマンドを1行にまとめ、デプロイメント操作を行おうとしています。 例えば、以下のような場合です。
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
解決方法は?
前のコマンドが成功したときだけ、それぞれのコマンドを実行したい場合は
&&
演算子を使用します。
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
1つのコマンドに失敗すると、それに続く他のコマンドはすべて実行されません。
前のコマンドが失敗したかどうかに関係なく、すべてのコマンドを実行したい場合は、セミコロンで区切ってください。
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
あなたの場合、次のコマンドの実行が前のコマンドの成功に依存する、最初のケースを望んでいるのだと思います。
また、すべてのコマンドをスクリプトにまとめて、それを代わりに実行することも可能です。
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
行末のバックスラッシュは、シェルが次の行を新しいコマンドと勘違いしないようにするためのもので、バックスラッシュを省略すると、コマンド全体を1行で書かなければならなくなります。
バックスラッシュと
&&
は、コマンドのいずれかが失敗した場合にスクリプトを終了するようにシェルに指示します。そのためには
set
組み込み関数で
-e
引数で指定します。これを使えば、もっと自然な形でスクリプトを書くことができる。
#! /bin/sh
set -e
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
それをファイルに保存して、例えば
myscript
を作成し、実行可能な状態にします。
chmod +x myscript
これで、そのスクリプトをマシン上の他のプログラムと同様に実行できるようになりました。しかし、もしそのスクリプトを
PATH
環境変数(例えば
/usr/local/bin
または、一部のLinuxディストリビューションでは
~/bin
) の場合、そのスクリプトへのパスを指定する必要があります。カレント・ディレクトリにある場合は、次のように実行します。
./myscript
スクリプト内のコマンドは、最初の例のコマンドと同じように動作します。次のコマンドは、前のコマンドが成功した場合にのみ実行されます。すべてのコマンドを無条件に実行するには、単に
set -e
:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
関連
-
Linux 5.10.10 正式版リリース:NULLポインタの不具合修正など。
-
deepin20のデフォルトブラウザを設定するには?deepinにデフォルトブラウザを追加するためのヒント
-
Process.waitFor()の戻り値の意味するところ
-
[解決済み] 標準エラー出力を /dev/null にリダイレクトする。
-
[解決済み] WindowsのCMDで1行に2つのコマンドを実行するにはどうしたらいいですか?
-
[解決済み] Linuxのコマンドラインで複数ファイルの文字列を置換する方法
-
[解決済み] LinuxでCPU/コアの数をコマンドラインから取得する方法は?
-
[解決済み] ハウツー:C#でコマンドラインを実行し、STD OUTの結果を取得する
-
[解決済み】VimでDOSの改行コードをLinuxの改行コードに変換する。
-
[解決済み】利用可能なすべてのコマンドとエイリアスをリストアップするLinuxコマンド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Linux Mintで入力メソッドを削除する方法は?Linux Mintで冗長な入力メソッドを削除するためのヒント
-
Kali Linuxのデフォルトのひげメニューアイコンを変更する方法は?
-
deepin20のソフトをアンインストールする方法を教えてください。deepinのアプリケーションをアンインストールする2つの方法
-
apache startup error (98) Address already in use: make_sock: could not bind to...
-
[解決済み] ビーコン待ちでハングアップしたリーバー
-
[解決済み] ディレクトリInodeと通常ファイルInodeの比較
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] エクスポートあり/なしの変数の定義
-
[解決済み] Linux/Unixで$PATHを永久に設定する方法 [終了しました].
-
[解決済み] bashスクリプトでset -eはどういう意味ですか?