よく、コマンドを実行する時に引数としてファイルを指定して、その中に書かれた物を使うといった物がある。例えばsftpのコマンド。更にはsshのキーファイルやpgpass、rsyncのエクスクルードなどなど。そういうコマンドをシェルから呼ぶ時にヒアドキュメントを使うと綺麗にかけたりすることがあります。 複数行に渡るファイルをシェルから作るときもechoを連発する必要もなくなります。 ヒアドキュメントとは
bashの環境設定ファイルについて 普段パスを指定すること無くコマンドを利用できるのは、ログイン時にコマンドへのパスが記述された設定ファイルを読み込んでいるからです。 以下の順序で設定ファイルを読み込んでいます。 ログイン時 1.「/etc/profile」の読み込み このファイルはログイン時に読み込む全ユーザー共通の設定です。ここで基本的なコマンドにパスを通しています。 2.「.bash_profile」の読み込み 続いてユーザーのhomeディレクトリにある「.bash_profile」を読み込みます。 それがない場合は「.bash_login」。 それもない場合は「.profile」。 という順序でユーザー個別の設定を読み込みます。 なぜか3つも用意されていますが、ディストリビューションによって優先順位や有効なファイルが違うため、使い分ける必要があります。CentOSの場合は「.bas
#!/bin/bash echo "Hello world" exec 1> >(awk '{print strftime("[%Y-%m-%d %H:%M:%S]"),$0 } { fflush() } ' >>stdout.log) exec 2> >(awk '{print strftime("[%Y-%m-%d %H:%M:%S]"),$0 } { fflush() } ' >>stderr.log) echo "stdout" echo "stderr" >&2 exit 0 # ./output2logfile.sh Hello world # # ls -l 合計 12 -rwxr-xr-x 1 root root 250 7月 5 06:40 2015 output2logfile.sh -rw-r--r-- 1 root root 29 7月 5 06:52 2015 s
OSSなどを使っていると、プロダクトにデフォルトで付属している設定ファイルは、丁寧に説明書きがされているケースが多く、コメントアウトされている行が多いです。 馴染みがあるのは、Apacheの設定ファイル(httpd.conf)でしょうか。結構細かくコメントが書かれていますよね。 で、それをそのまま使うのも、どうかという話なんですが、じっくり設定を確認したい場合、そのあたりのコメントが結構ウザい時もあります。(スミマセン) というわけで、grepコマンドを使って、それらを排除した(取り除いた)状態で出力して確認してみます。 $ grep -v -e '#' /etc/httpd/conf/httpd.conf やり方は、上記のコマンドのような感じ。 "-v"は、結果を反転し、マッチしなかった行を選択するオプション。"-e"の後に、マッチするパターンを記述します。 さらに、空行も除いた状態で出
→ 他のプログラミング言語と同様に = を使用する。 シェルスクリプトでも C言語などと同様に = を使用することで変数に値を設定することができる。ただし、C言語とは違い = の前後にスペースがあってはいけない。 また、変数名の大文字と小文字は区別されるため変数 VAR と変数 var は別物として扱われる。さらにシェル変数に「型」は存在しないので、文字列や数値を区別なく設定できる。 ポイントをまとめると以下のとおりとなる。 = を使う 値の設定時は変数名の先頭に $ を付けない ($ は参照時のみ) = の前後にスペースを入れない (前後にスペースがあるとエラー) 型は存在しない (declare コマンドや typeset コマンドで似たようなことができるが推奨はしない) 変数名の大文字・小文字は区別される (VAR と var は別物) 特に「2」は初心者が犯しがちなミスなので注意す
自分用にメモしておく コマンド実行 CMD1; CMD2, CMD1 && CMD2 ;はCMD1の結果に関わらずCMD2も実行される &&はCMD1の結果が正常な場合のみCMD2が実行される CMD1 || CMD2 - 失敗時に後続コマンドを実行する CMD || printf "%b" "MSG"でエラーメッセージを表示する エラーメッセージ表示後exit 1したい場合 = CMD || { printf "%b" "FAILED.\n" ; exit 1 } CMD || printf "%b" "FAILED.\n" ; exit 1と波括弧無しで書くと期待通り動作しない(CMDが成功時もexit 1してしまう) CMD & - バックグラウンド実行 CMD &で[1] 4592のようにジョブ番号とプロセスIDが表示される killしたければkill %ジョブ番号 か kill
bash の使い方を1から見直すシリーズ シェルスクリプトは、もうbashで書いていいよね。bashが動かない環境なんてないんだし。 bash の紛らわしい記号や歴史的経緯によるPOSIXかき分けなどがあって、bashに特化した記事って少ないし断片的なので、色々と調べたことを再構成してまとめて記事にしました。 私自身 [[ / [ の違いが全然わからないので調べ始めました。その結果あれこれ知見が得られたので書きながら復習をしていました。 気づけば、bash の教科書的なものになってしまいました。 何かの役に立てばいいと思って記事のインデックスをまとめておきます。まだ一部書けてないですがそのうち書きます。 はじめに はじめに bashとPOSIX bashが動く環境 zshとの比較 変数と配列と数値計算 変数 配列のまとめ 組込 let による数値計算とインクリメント 連想配列(assoc
表示例 エスケープシーケンスの構造 記号ばかりでややこしいため図にしてみました。 色以外の \u などについては以下のページが参考になります。 bashのプロンプトを変更するには (atmarkit) 他の色のサンプル 改行について 元々、エスケープシーケンスがあると入力コマンドに折り返しが発生するあたりで表示がおかしくなったので改行を入れて対策していましたが、コメントで教えて頂いた通り、これは先頭の \[ を入れ忘れてたのが原因でした。 違和感あるかも知れませんが、プロンプトに出す情報を増やしても画面が狭くならなくなったのでこれはこれで気に入ってます。 使い所 grepなどで1つ前と2つ前のコマンドの出力の境界を見逃さなくなりました。 開発環境とプロダクション環境の区別や特権ユーザかどうかの区別にも良いと思います。 複数人がログインする可能性のあるサーバは、あんまり好き勝手に弄りたくない
オペレーティングシステムは、コンピュータのハードウェア管理、ファイル管理、データの入出力と管理、アプリケーションプログラムやユーティリティの実行、ユーザーとの対話などを効率的に行うための制御・処理プログラムの基本セットです。
ドーモ、SREチームの湯谷(@yutannihilation)です。最近気になるモジュラーシンセはIntellijelです。 上司がいい感じのコマンドをつくるという記事を書いていましたが、いい感じのコマンドにはいい感じのタブ補完を付けたくなります。この記事ではBashのタブ補完を自作する方法を紹介します。 タブ補完の仕組み Bashのタブ補完自体はBashに組み込まれている仕組みです(参考:Bash Reference Manual - 8.6 Programmable Completion)。completeというBashの組み込み関数によって補完方法(compspec(completion specification)と言うらしいです)が規定されていて、これがタブなどによって起動されます。 タブ補完は、lsならファイル名、cdならディレクトリ名、というようにコマンドに応じたものが設定さ
Project DescriptionBash Infinity is a standard library and a boilerplate framework for writing tools using bash. It’s modular and lightweight, while managing to implement some concepts from C#, Java or JavaScript into bash. The Infinity Framework is also plug & play: include it at the beginning of your existing script to import any of the individual features such as error handling, and start using
ターミナルのコマンド履歴をインクリメンタルに検索して実行するにはControl + R - Macの手書き説明書 自分も知らなかった...。まだまだ知らないことって、いっぱいある。 それにしてもコマンド履歴というのは、自分はよく使う。直接入力するより、過去の履歴を探し出して、必要な修正してからコマンド実行するパターンが多い。長〜いファイルパスやオプション指定のあるコマンドなんて、ほとんどがコマンド履歴の修正と実行である。コマンド履歴が使えるからこそ、快適なコマンド操作ができると思っている(自分の場合)。 コマンド履歴は質実剛健なコマンドの世界に、選択して実行するというGUI的なゆるい操作感を与えてくれる。コマンドを忘れる心配や、スペルを間違う心配から、救ってくれる。それほどまでにコマンド履歴に頼りきっている状況なのに、今日も上下の矢印キーを激しく連打するしかない自分は、一体どうしたら良いも
アクセスログ見てたらBashでループさせたい人が多いようなので。 BASHで10回ループ for i in {0..10};\ do \ echo $i;\ done;指定回数分ループするときは{}(カーリーブレース)で囲むのがミソ。 seq を使う例 for i in `seq 1 10 `;\ do \ echo $i;\ done;`seq 1 10 ` は覚えにくいし直感的とは言い切れない 007.txtのような0埋めにする 007.txtのような0パディングにするにはsprintfと組み合わせる for i in {0..10};\ do name=$(printf accesslog.%03d.log $i);\ echo $name;\ done; accesslog.000.log accesslog.001.log accesslog.002.log accesslog.
→ 値のリストで変数を初期化する。 括弧内に値のリストを指定したものを変数に設定することで、その変数を配列として使用することができる。 ※ ksh の場合は set コマンドを使用して配列の設定を行う。括弧を使用した設定方法は使用できないこともあるので、ksh で配列を使用する場合は、set コマンドを使用する。 $ array=(111 "foo" 222 "bar" 333 "foobar") #↑配列に値を設定する。 $ echo $array 111 #↑インデックスを指定しない場合は、先頭の値のみが出力される。 $ echo ${array[@]} 111 foo 222 bar 333 foobar #↑全ての値を出力する場合は、インデックスに「@」を指定する。 ksh の場合は以下のように set コマンドを使用する。 $ set -A array 111 "foo" 222
WordPress Select a default language
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く