/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
会社の中でシェルスクリプトについての話をすることにしたので、このエントリはそのためのものです。 個人的な好みとかもいろいろ入ってしまっているので、そのあたりは取捨選択してください。 なぜ今シェルスクリプトを学ぶのか 公開されているSRE本をマルっとPDF化する SpotBugsのViolationレポートをMerge Requestのコメント投稿する ぼくの互換性についての考え方 何で書くか シェルスクリプトをうまく書くには ShellCheckを使う バッドパターンとその修正 line-by-lineの処理が多い lsを使う ls /directory | grep mystring ls | grep -v 'log$' lsの結果をループさせる 良いシェルスクリプトを書くためのTIPS set -euする 文字列は基本的にクオートする 局所変数にはlocalを使う 定数は読み取り専用
こんにちは、カナダに来て1年弱ですが、いまだに"how are you?"にアイムファインセンキューと返してしまう全然英語が上達してない聖賢です。 インフラエンジニアならみんな大好きtopコマンド、おそらくビヨンドの中ではサーバ運用の中で最初に覚えるコマンドじゃないでしょうか。 実は結構奥が深いコマンドでいろんなことができるので、これまでドヤ顔で「こんなこともできるんやで」と上司の威厳、、、もとい先輩としての経験を後進に伝えていたのですが私も最近になって初めて知った超便利な使い方を紹介したいと思います。 ちょっと長いですがお付き合いください。 普通にtopコマンドを実行すると以下のような画面が表示されます 結構これだけでもサーバ運用には重要な情報が詰まっているのですが、topコマンドの見方などは他でも色々と紹介されていると思うので今回は割愛します 今回はこのtopコマンドの表示を最終的にこ
【2022-01-22追記】簡易版のLISP処理系をPOSIX準拠シェル(+sed)で作成する様子の動画を作成してみました. この記事は,筆者がシェルスクリプトで簡易実装している純LISP処理系の開発についてまとめたものです.『PureLISP.sh』と呼んでおり,次のGitHubリポジトリでパブリックドメインとして開発・公開しています. 基本的には,上記リポジトリのREADMEの内容を記事として膨らませたような構成です.このことから,今回の記事内容に関するコメント等だけでなく,『PureLISP.sh』そのものへの御意見等(GitHubのIssues/Forkを含む)も受け付けます.ただし,開発の経緯・目的から,次の3点は維持します. 最低限必要な要素で構成されたLISP処理系を志向すること POSIX準拠のシェルスクリプトで実装すること パブリックドメインにて開発・公開すること なお,
-eオプションでSQLを実行する。 mysql -uroot -e "show tables" -eオプションはトランザクションに注意。 以下はトランザクションは効いていません。 mysql -uroot -e "begin;" date mysql -uroot -e "insert into hoge values(1, 2, 3);" date mysql -uroot -e "commit;" トランザクションが効かない理由は簡単です。 mysqlコマンド毎にコネクションが切れているからです。 従って、-eオプションでトランザクションを有効にするには、以下のようにワンライナーにするしかありません。 mysql -uroot -e "begin; insert into hoge values(1, 2, 3); commit;" bashの変数をSQLに埋め込む事も可能です。以下は
LinuxなどのUNIXマシンを操作する際、SSH接続でコンソールからリモート操作を行うのが一般的だろう。 で、そのSSH接続をWebページ上から行えるツール『Shell In A Box』というものがあるらしいので使ってみることにした。 1.インストール 当然、まずはインストールから。 各ディストリビューション別に、以下のコマンドを実行してインストールを行う。 Debian/Ubuntu sudo apt-get install openssl shellinabox RHEL系 sudo yum install openssl shellinabox 2.設定 次に設定作業から。 設定ファイルについてはデフォルトのままでいくが、その場所と内容についてを以下に記載する。 Debian/Ubuntu test@Test-Ubuntu001:~$ cat /etc/default/shell
パイプライン は、最近のソフトウェアエンジニアリングにおいて、非常に便利な(そして驚くほど活用されていない)アーキテクチャパターンです。ソフトウェアでデータの流れを制御するためにパイプとフィルタを用いる考え方は、最初のUNIXシェルが作られた1970年代からあります。もしターミナルエミュレータでパイプ” | ”を使ったことがあるなら、”パイプとフィルタ”を活用できていることになります。以下の例を見てみましょう。 cat /usr/share/dict/words | # Read in the system's dictionary. grep purple | # Find words containing 'purple' awk '{print length($1), $1}' | # Count the letters in each word sort -n | # Sort l
以前作ったplenvsetupというツールについて簡単なテストをかいた話(もしくはTravisでshell scriptをテストする方法についての試行錯誤) 相当前の話ではあるけど、ぼくはplenvsetupというツールを作って公開している。 これが何をするものなのかについては上記のブログ(ぼくの旧ブログ)を参照していただくとして、ツールとしては幸せな事に、Perl入学式の環境構築ツールとしてご利用いただいている。大変ありがたい話である。 Perl入学式での失敗 が、実は先日このPerl入学式で、このplenvsetupがうまく動かない、ということがあった。tsucchiさんをはじめとした様々な方のご協力を受け調査した結果、bashで実行すべきところが、shで実行されてしまっていたことがわかった。 直接的な原因としては、Perl入学式のドキュメントがそうなっていたため、ということではあるの
Ubuntu でずいぶん前に作ってた Packer の json で CentOS 用の box 作ろうと思ったら途中でハングした感じになってた。どうも reboot したとき、その script は exit するのだけど、 sshd やら network やらはまだちょっとの間生きているので Packer が次の script を走らせてしまうみたいだ。 Ubuntu の時は大丈夫だったのはなんでだ?。ただの奇跡かな。 reboot の実装違うとかかな。 で、ドキュメントとソース見たら、 ssh が切れたらすぐに次のスクリプトには進めなくなる上に、最大で start_retry_timeout 時間分待って再接続して次のスクリプトから進めてくれるということだったので、 #!/bin/bash -eux systemctl stop sshd reboot 当然こんな感じになりました。ば
pecoというインタラクティブに入力をフィルタして出力するコマンドがあって、使い始めてからシェルの操作方法が大幅にかわり、だいぶライフチェンジングだった。 最近このへんが流行ってるのでやたら記事あるけど、せっかくなので僕も使い道を紹介しようと思う。 pecoをzshで使う 1. peco ghq ghqを使ったローカルリポジトリの統一的・効率的な管理についてのこと。 僕も$GOPATHは$HOMEにしていて、今のところ別に困ることはない。 go getしたりghq getしたりして美しくディレクトリ切った上で、pecoに割り当てておいたC-sですぐ目的のディレクトリ開けるようにしてあるので、めちゃくちゃソース管理が楽になった。 function peco-src() { local selected_dir=$(ghq list | peco --query "$LBUFFER") if
橘玲の『「読まなくてもいい本」の読書案内』を読んだので、感想とメモをまとめておく。 この本、タイトルは『「読まなくてもいい本」の読書案内』だが、実際には「読まなくていい本」はほとんど紹介されていない。紹介されているのは、当たり前の話かもしれないが読むべき本だ。他の読書案内本と異なっているのは、”こういう本は読まなくて良い”と、ばっさり切り捨てているところ。読むべきか・読まなくてもよいかの基準は、20世紀後半に爆発的に進歩した科学研究の成果に置いている。著者は、この時期に起きた科学研究の大幅な進歩を”知のビッグバン”、”知のパラダイム転換”と呼び、これ以前に書かれた本は(とりあえず)読む必要がないと言い切る。古いパラダイムで書かれた本は捨てて、新しいパラダイムで書かれた本を読もうという話だ。ちょっと乱暴な分け方ではあるが、1980年代に大学生だった私には案外納得できるものだった。学生時代に最
2009/09/07 毎年夏に開催される軽量プログラミング言語(LL:Lightweight Language)をテーマにした「LLイベント」。第7回目となる「LLTV」が、2009年8月29日に東京・中野で開催された。この記事ではプログラムの一部、「大改善!!劇的ビフォーアフター」をレポートする。前編では、Rubyによるfortuneコマンドの“増築”と、Firefox拡張によるslコマンドの実装というネタ系発表をレポートした。中編ではC言語にLisp風のマクロを取り入れ、lsコマンドのソースコードを約半分に削減する匠の技をレポートした。後編となる本記事では、売り場業務が滞りがちだった販売管理システムをbashコマンドで“建て直した”という劇的ビフォーアフターの発表をレポートする。 DBを捨ててテキストファイルに変換 「100万件ぐらいの検索なら、シェルだけでも1000分の数秒でできます
シェルについて調べてるといきなりノックアウトされた。 当ページ管理人のネット上・実社会での観測結果によると、「シェルスクリプト」を「シェル」と呼ぶ人のスキルは著しく低い傾向がある。 区別ついていましたか? 「いや、シェルスクリプトって長いからシェルって省略してただけだし…」 ではシェルって何ですか? シェルとシェルスクリプトについて違いを教えてください。 「・・・」 というわけで調べてみた。 シェルとは シェルはOSとユーザのやり取りを仲立ちするためのものである。 ユーザーが直接OSを操作して、システム全体におよぼすような致命的なエラーを発生させるといったことを回避するために、OSの外殻(貝殻・シェル)として存在する。 つまりOSをユーザから守るための殻だったってことだ。 シェルにはCLIベースのものとGUIベースのものがある。 前者の例としてはBourne Shell(sh)やBourn
GitHub のプロジェクトごとの GitHub Pages (http://motemen.github.io/git-browse-remote/ とか)は gh-pages ブランチに push すればいいということになってますが(ヘルプ)、git checkout --orphan なんてこんなときくらいしか使わないし、決まりきった手順を毎度やるのもだるい。たとえば middleman を使ってるなら middleman-gh-pages というプラグインがあって、これを使うのも手だけれど、そうでない場合には結局手でやる必要があってこまる。そういうわけで、独立したシェルスクリプトにしてみました。 使い方 % push-gh-pages DIRECTORY DIRECTORY というのは GitHub Pages に push されるファイルが展開されるディレクトリ(Git で管理さ
はじめに つい最近知った便利なデバッグ方法 (長年シェルスクリプトを書いているのに知らなかった。これが常識だったら恥ずかしい…) シェルスクリプトのデバッグでは echo で変数の中身を見るという原始的な方法をよく使うかと思います。 いわゆる プリントデバッグ というやつですね。 もう少し詳しいデバッグが必要な場合は、 set -x と set +x でデバッグしたい部分を囲むという方法もあります。 今回は プリントデバッグ で使う echo の代わりに typeset or declare を使うと良いというお話です。 プリントデバッグは typeset or declare を使おう typeset or declare は変数宣言などでよく使うコマンドですが、変数の中身を見るのにも使えます。 echo と比べて何が良いのかというと、変数の中身はもちろん変数名や変数の型も表示してくれ、
先日のKyoto.lisp Tech Talkでご紹介しましたが、「Shelly」というプロダクトを作りました。 Shelly View more presentations from fukamachi まとめると、ShellyはCommon Lispの関数をシェルコマンドのように実行できるユーティリティです。 インストールは以下のコマンドを実行してください。「LISP_IMPL=ccl」の部分は使っている処理系に合わせて変更してください。LISP_IMPL=sbclとか。 $ curl -L http://xrl.us/shly | LISP_IMPL=ccl perl - installもしくはREPLからShellyをロードしてください。 (ql:quickload :shelly) (shelly:install) インストールが成功すると ~/.shelly にファイルがコピー
というツイートが昨日RTで流れてきたので、面白いなと思ってやってみている。 https://github.com/teramako/scripts/blob/master/shell/cat.sh cat コマンドは本来 concatenate をするコマンドである。ということで、これに反した場合にネコを出して矯正させようという趣旨である。単なる bash スクリプトである。~/bin/catとして放り込むのが良かろう。 C言語版、Perl版等のもうちょっと高級な言語での書き直しを望みます。(僕はCもPerlも得意じゃないので...) 標準入力がない、かつ、ファイルが2つ以上指定されていない 標準入力がある、かつ、ファイルが1つ以上指定されていない 「標準入力がない、かつ、ファイルが指定されない」に修正 場合にネコがでる。 ずさーーーーとネコが流れてきて 最後に と注意される仕様。 因みに
Dropbox-UploaderはShellスクリプトで動作し、指定したフォルダ/ファイルをDropboxへアップロードする。 Dropbox-UploaderはShellスクリプト製のオープンソース・ソフトウェア。Dropboxの人気はとても高い。とりあえずフォルダに入れておきさえすれば後は自動で同期してくれるので手間いらずだ。複数のパソコン間でも簡単にデータが同じ状態に保てる。 実行中(この後で止まってしまう…) しかし様々な事情でDropboxを入れられないケースもあるだろう。全てのファイルがコピーされるのでごく小さなSSDしか備えていない場合もあるだろう。そんな人でもとりあえずファイルをアップロードすることができるのがDropbox-Uploaderだ。 Dropbox-UploaderはShellスクリプトとして動作する。使い方は簡単で、ターミナル上でユーザ名を入力し、アップロー
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く