シェルスクリプトはあまり触らないから忘れちゃうのでメモっとく。 主にパイプとかリダイレクトとかプロセス置換とか。 パイプ コマンドの出力を別のコマンドの入力にする
![シェルの入出力制御あれこれ](https://cdn-ak-scissors.b.st-hatena.com/image/square/626edc2838688e3ca998847a1efb8999524da6f2/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgyJUI3JUUzJTgyJUE3JUUzJTgzJUFCJUUzJTgxJUFFJUU1JTg1JUE1JUU1JTg3JUJBJUU1JThBJTlCJUU1JTg4JUI2JUU1JUJFJUExJUUzJTgxJTgyJUUzJTgyJThDJUUzJTgxJTkzJUUzJTgyJThDJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz1lYmZmNzVhMTg3OTg0MWE4YmY4NDZjZTc1N2UwYjRmNQ%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB0YWcxMjE2JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1jNTA1ZmQyN2UxNTRmYmQzNGQ4M2M2OGNmOGQwOTQ2NQ%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D09d3bad9d5d052829160c4a4302cce5a)
はじめに bashを使うにあたり、使用環境をユーザ好みにカスタマイズができる。 .bash_profile .bashrc この2つが設定ファイルである。 それぞれのファイル設定の使い分けをまとめる。 .bash_profile ログイン時に1回、実行される。 例えば、ターミナル.appを起動した際に読み込まれる。 このファイルには具体的に何を設定すれば良いのかは、 環境変数(exportで宣言する変数) を設定すると良い。 .bashrc シェル起動時に1回、実行される。 コマンドライン上でbashと叩くと再度.bashrcが読み込まれる。(.bash_profileは読まれない) シェルを起動する度に毎回設定したい場合はこのファイルに設定を入れる。 このファイルには具体的に何を設定すれば良いのかは、 エイリアス シェル関数 コマンドラインの補完 を設定すると良い。 #設定ファイルをつく
→ 他のプログラミング言語と同様に = を使用する。 シェルスクリプトでも C言語などと同様に = を使用することで変数に値を設定することができる。ただし、C言語とは違い = の前後にスペースがあってはいけない。 また、変数名の大文字と小文字は区別されるため変数 VAR と変数 var は別物として扱われる。さらにシェル変数に「型」は存在しないので、文字列や数値を区別なく設定できる。 ポイントをまとめると以下のとおりとなる。 = を使う 値の設定時は変数名の先頭に $ を付けない ($ は参照時のみ) = の前後にスペースを入れない (前後にスペースがあるとエラー) 型は存在しない (declare コマンドや typeset コマンドで似たようなことができるが推奨はしない) 変数名の大文字・小文字は区別される (VAR と var は別物) 特に「2」は初心者が犯しがちなミスなので注意す
この記事の内容 .bash_profile と .bashrc の使い分けの説明はいろいろあるんですが、 どうにも腑に落ちなかったので、私なりに調べてみました。 で、自分的にはこれで必要十分な理解ができたと思ったので投稿。 とりあえずここまで理解すれば、後はその都度対処していけるかなー、と。 2018/03/20追記 :もともと合わせて1つの記事にする予定だった 「Linuxでシェル間の設定の引継ぎを蛇足感満載で確認した」という記事を投稿しました! こちらと合わせて読んでいただけると嬉しいです。 スーパー忙しい人のための結論 設定はすべて.bashrcに書く これでいいんやで。 動作確認の環境 Windows10のHyper-V上で動いているCentOS7で動作を確認 CentOS7はインストール直後の状態で試しているので設定ファイル等は書き換えていない OSインストールのグループ(最小限
Bashで、ファイルやディレクトリの存在を確認する方法を紹介します。 if testによる確認方法 ファイルやディレクトリの存在を確認するには、以下の構文を使います。 if [ -e パス ]; then # 存在する場合 else # 存在しない場合 fi 「パス」の部分に、チェックしたいファイルやディレクトリのパスを指定します。 (実際は、testコマンドを実行することになります。) ファイルtest.txtと、ディレクトリtestdirを用意した状態で、サンプルcheck.shを実行してみます。 test-check-file$ ls check.sh test.txt testdir check.shの内容は以下のとおりです。 #!/bin/bash file=test.txt dir=testdir # test.txtが存在するかチェック if [ -e $file ]; th
引数を処理する 引数とは? 引数 (ひきすう) とはコマンド (シェルスクリプト) 実行時に、コマンドラインから渡される値のことである。 引数は実行時にプログラム内で参照され、シェルスクリプトの実行結果 (動作) に影響を与える。引数はパラメータと呼ばれることもある。 → コマンド名に続けて引数としてコマンドに渡したい値のリストを指定する。 引数はコマンド名に続けてスペース区切りで指定する。引数として指定可能な値の数は各コマンドにより異なる。 【参考】 引数とオプション コマンド実行時に指定する値には引数とオプションがある。引数は実行に使用されるファイル名や出力されるメッセージなどを指定するのに使用される。 一方、オプションは -f などのように - (ハイフン) とアルファベット1文字で表記され、主にコマンドの振る舞い方を指定する目的で使用されるものである。 また、オプションは -a -
$ mkdir /very/_very/Very-long/directory_name/20170915 なんて操作をしたあと、そのディレクトリにcdしたい場合ってまれによくありますよね。 どんなやり方があるか考えてみました。 1. コピペする そのまんまですが、これをやりたくなくてこの blog を書いてます。 2. TAB 補完で頑張る これも無いわけではないですが、間違えたりすることを考えると正直あんまりやりたくないです。 3. 上矢印キーで前コマンドを呼び出し、右矢印キーで先頭に戻ってmkdirをcdに書き直す よく見る方法ですが、もうすこし少ない手数でできないでしょうか。 4. 上矢印キーで前コマンドを呼び出し、Ctrl-Aで先頭に戻ってCtrl-Dx5 のあとにcd BASH のキーバインドはデフォルトだと emacs モードなので、このやり方が出来ます。 でもまだちょっと手
あるディレクトリ無いのファイル数が規定を超えたら自動的に 削除する。 考え方: ls -l abc* | wc -l で行数を調べその行数が 規定を超えているか調べる。 if [ $cnt -gt $mx ]; then ls -tr | head -$(($cnt-$mx)) | xargs rm -tr 作成時間の古い順 $(($cnt-$mx))は多い行数 xargs は、その結果で次の rm コマンドを実行 実際のプログラムサンプルは以下を見る #!/bin/bash # # -- remove over preset cont files # mx : max count file # dr : directory to check # fn : file to find # mx=6 dr="tmp" fn="a*" # cd $dr cnt=`ls $fn | w
ターミナル&bashでコマンドラインを編集する時、実にいろいろなキー操作がある。便利そうだからと、あれもこれも覚えようと欲張るのだけど、すぐに忘れてしまう...。もっと厳選して覚えておかなくては。自分にとって必要最小限のキー操作を探ってみた。 勝手な方針 OSX環境のキーバインドが使える場合は、そちらを優先する。 ホームポジションの維持にこだわらない。 よって、矢印キー・deleteキーなども遠慮なく使う。 カーソル移動 行頭・行末・単語区切りの移動で、カーソルを素早く動かす。 マウスカーソルで指定すれば、クリックした位置にジャンプする。 control-A・E 行頭・行末へ移動 option-←・→ 1単語ずつ移動 option-クリック クリックした位置へ移動 削除 行頭・行末・スペース・単語区切りの削除によって、修正を楽にする。 control-U・K 行頭・行末まで削除 contr
前回までにバックグラウンドでジョブを複数管理できるようになった。ところで... ターミナルでタブを開く度に、あるいはsshでどこかの端末にログインする度に、 シェルが起動して、コマンドを入力・実行・出力する環境を整えてくれる。 そして、タブを閉じたり、ログアウトすると、シェルは終了する。 と同時に、通常はそのシェル上で実行されていたジョブも終了してしまう。 不要なバックグラウンドジョブを漏れなく終了できるので、多くの場合これで良いのだけど、 稀に、シェルが終了しても処理を続けて欲しい状況もある。 特にsshでログインして時間のかかる処理(ダウンロードとか)をしている時などは、 一旦ログアウトしたいんだけど、処理はそのまま続けて欲しいことが多い。 そんな時は、nohupコマンドを使うと幸せになれる。 環境 MacBook Pro Retina15 OSX 10.9.5 $ bash --ve
nginx のインストールしようと思ったら sudo -s というのが出てきた。 man sudo によると -s [command] The -s (shell) option runs the shell specified by the SHELL environment variable if it is set or the shell as specified in the password database. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is ということでシェルを指定するらしいんだけど、実際は現在のユーザーがrootに変更
ログインシェルが bash に設定されている環境で、SSH 経由でログインなしのコマンド実行 (= 非対話的実行) を行うために、ユーザ独自の設定 (環境変数の変更/追加等) を設定ファイルに記述する際の注意点を、最初にまとめておきます。 SSH 経由でのコマンド実行に必要な追加設定は ~/.bashrc に記述する ~/.bashrc への記述追加の際には: [ -z "$PS1" ] && return のような、「非対話的実行時には、以降の設定評価を中断」する記述の有無を確認し 記述がある場合は、それよりも前の行で追加設定を記述する 「非対話的実行」の判定は、上記以外の方法でも可能です。必ずしも上記と同一の記述で対処しているとは限りませんから、注意してください(本エントリ末尾でも、- パラメータを使った判定方法を例示しています)。 以下は、bash の設定ファイル読み込みの詳細に関す
ユーザー定義変数の使い方 変数は、シェルの世界、とくに英語のドキュメントでは「パラメータ」と呼ばれていますが、日本語でパラメータというとどうも違う意味にとられがちなので、ここでは「変数」と呼ことにしたいと思います。ではシェルスクリプトにおける「変数」の取扱と特徴について見ていくことにしましょう。 シェルやシェルスクリプトで変数を定義する場合は、 のように記述します。とくに前もって変数を宣言したりする必要はありません(宣言することもできますが)。‘=’の両側にスペースをあけたりしてはいけません。C言語などの変数代入などの際にスペースをあける癖のある方は気をつけてください。 格納された値を参照する場合は、変数の先頭に‘$’をつけます。ためしにechoを使って標準出力に変数を表示してみます。
Macの標準端末アプリケーション、ターミナルの、自分の環境での設定です。 開発をごりごりとやるような自分じゃなくても、ターミナルを触ることが楽しくなりはじめてからかなり便利に使えるようになってきました。 コマンドラインというと敷居が高く感じてしまいますが、わかってくると楽しくなる。こういうささやかな喜びみたいなものを誰か(誰)にも体感していただきたい。ということで、その入口になるかもしれないしならないかもしれない、ターミナルの環境を整える、ということをやってみます。 範囲としてはターミナルの設定の初歩的なところから、vimの設定の一歩目まで、という感じです。vim便利です。 あと自分はデフォルトのbashメインなのでbashで。 ■こんな感じ Visorを入れており、【⌃control】キーを二回ぽちぽちっと押すと上からスライドでターミナルが現れます。Visor以外で開く時のウィンドウは黒
なお、以前に操作したコマンドの履歴を番号付きで表示させるには、history コマンドを使用します。デフォルトでは、1000個まで履歴に保存されます。もし、この数値を変更したい場合は、環境変数HISTSIZEの値を変更します。シェルで、HISTSIZE=500 のように入力すると履歴は500回まで保存されるようになります。変更されたかどうかを確認するには、env コマンドを使用します。なお、入力履歴はユーザーごとに、ホームディレクトリ下に .bash_history というファイルが作成されており、そのファイル内に入力履歴が記録されていきます。なので、システムを再起動したり、停止させたりしても、ホームディレクトリ直下に.bash_historyが存在すればいつでも入力履歴を呼び出すことができます。 ここで、ちょっと余談なんですが、TeraTerm での便利な画面(スクロール)移動について紹
bashは、いつ・どんな風に設定ファイルを読み込んで、設定されるのだろうか?結構悩んでしまった。調べてみた。 日本語表示の設定などは、bashでなく、ターミナル側の設定なのだろうか? # ターミナルのタブやウィンドウを開いた時(ログインした時)、sshでログインした時、読み込まれる /etc/profile # ログイン後にbashコマンドを起動した時、読み込まれる # /etc/profileのスクリプトによって、読み込まれる設定になっている /etc/bashrc # ターミナルのタブやウィンドウを開いた時(ログインした時)、sshでログインした時、読み込まれる # 左側のファイルが存在しない時、右側のファイルが読み込まれる ~/.bash_profile || ~/.bash_login || ~/.profile # ログイン後にbashコマンドを起動した時、suでユーザーを変更し
OSX 10.5以降では、何もしなくてもターミナルは日本語を表示してくれる。これまでデフォルト設定のまま問題なく使えていたので、無関心になりがちだった。でも、改めて操作方法や設定を調べ直すと、便利な操作や設定があることに気付かされる。そして、新たな操作や設定を知ることは、シェルやコマンドの仕組みを覚えることに繋がる。きっと、まだまだ自分の知らない多くの技が眠っているはず。 作業環境 MacBook OSX 10.6.2 bash $ bash --version GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0) Copyright (C) 2007 Free Software Foundation, Inc. ターミナルの操作 クリア command-K、あるいはcontrol-Lで、ターミナル画面のクリア。(ほぼ同
bashでは、"Ctrl"や"Esc"キーと組み合わせることで様々な操作ができるので、メモ代わりにまとめておきます。 よくやるのが「Ctrl + s」キーを押してしまうと、フリーズしたかのように見えるので一瞬焦ってしまう。そんな時は・・・ Ctrl + b カーソルを左へ1文字移動 (←キーでもOK) Ctrl + f カーソルを右へ1文字移動 (→キーでもOK) Esc + b カーソルを右へ1単語移動 Esc + f カーソルを右へ1単語移動 Ctrl + p historyの1つ前に入力したコマンドを表示 (↑キーでもOK) Ctrl + n historyの1つ後に入力したコマンドを表示 (↓キーでもOK) Ctrl + h カーソルの左1文字を削除 (BackspaceキーでもOK) Ctrl + d カーソルの右1文字を削除 (DeleteキーでもOK) Ctrl + a カー
現在、Red Hat Linux 9を利用しています。ホームディレクトリに「.bashrc」や「.bash_profile」というファイルがあるのですが、これは何でしょうか? ご質問にあるファイルは、どちらもユーザーのホームディレクトリに置かれ、シェルが起動するときに実行される初期化ファイルです。 シェルには、大きく分けて2つの役割があります。まず1つ目は、ユーザーがコマンドを実行するためのコマンドライン環境を提供し、ユーザーとOSの中枢であるカーネルとのインタフェースの役割を果たすことです。 もう1つは、ユーザーがログインを行った際に、環境を整えるためにさまざまなファイルを実行し、初期化を行うことです。初期化のために実行されるファイルはシェルの種類によっても異なり、今回ご質問にあるファイルはbash(Bourne Again SHell)が起動されるときに実行されます。 以下では、bas
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く