二十五日半狂乱、2日目の記事. 実行中のプロセスをkillしたいが、対象のプロセスをkillすると子プロセスがゾンビ化しちゃうからプロセスツリーを丸ごとkillしたくなった. どうせならkillコマンドっぽくプロセスIDで指定して、指定したプロセスをrootとしてツリーの葉から根に向かってツリー上のプロセスをkillして回りたい. 車輪の再発明の匂いがプンプンするので、「そんなのこうすれば一発じゃん.」ってのがあったらご指摘いただけたらと思います.(※議論し尽くされていました) 追記:後日、↑のリンク先にある"より良いコード"について書いたので、こちらも参考をば. コードはgithub上に上げた. doi-t/killpstree READMEにも書いたけど、目的を達成するシェル関数*1は気持ちいいくらいにシンプル. killpstree(){ local children=`ps --p
bash のシェルスクリプトを書くときに、いつも脳死で以下をやっている。(同僚が整備してくれたものをコピペしている) エディタなり CI で shellcheck をまわす set -euxo pipefail と冒頭に書く こんな感じ #!/bin/bash set -euxo pipefail いつまでもコピペではさすがにアレなので、意味を調べたメモ。 shellcheck koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts イケてない書き方に警告を出してくれる それぞれの警告にはエラーコード割り振られていてとても便利 エラーコードごとに正誤例、解説が書かれているのでわかりやすい SC1000 の例 CI もそうだし、エディタのプラグインも充実 しているのでとりあえず入れておくと良い set
bashからzshに乗り換えるユーザーを対象に16の違いをまとめました。MacOSもbashからzshに変更になりましたので、zshを使い始めるにあたってのポイントを解説していきます。 はじめに zshとは? 2019年、WWDC19の基調講演でApple社は次にリリースする「MacOS X Catalina」より標準のシェルを「zsh」に変更すると発表しました。そして現在、Macを購入したり最新のバージョンにアップデートしてターミナルを開くとbashではなくzshが起動します。 もともとMacOS Xは当初tcshであったのがv10.3 Pantherよりbashに変更された経緯があり今回それがzshにさらに変更された形になります。 こうなった経緯としてはbashのライセンスとセキュリティによる事情があります。MacOS Mojaveまでに搭載されているbashはバージョンが3で実はこれ
Bash は言わずと知れた歴史あるコマンド言語です。テキストにコマンドの羅列を記述するだけで、手軽にシェルスクリプトとして実行することができます。 シェルスクリプトの実体はシェルコマンドの羅列に過ぎませんが、手続き型プログラミング言語にあるような制御構文も備えています。変数や条件分岐、ループ、関数などです。これらを使えばシェルスクリプトでプログラミングも可能です。 もちろん、現代の一般的なプログラミング言語と比べると機能は限られます。他の言語には見られないシェルスクリプト特有の癖や記法も数多くあり、最近の言語に慣れている人ほど、つまずくポイントが多いです。 しかし、シェルスクリプトだからこその良さもあります。Bash は現在でも多くの OS で標準シェルとして採用されており、普段使っているシェルコマンドを書くだけで動かせる手軽さは何者にも代えがたいです。一度身につけておくと長く使えるお得な
俺の愛用ワンライナー、Web企業のエンジニア16人に聞きました エンジニアの皆さんが愛用する自作のワンライナーってどんなもの?Web企業で働くエンジニアの方々に、秘蔵のワンライナーを聞きました。 ワンライナーとは、何か特定の処理を「たった1行のプログラム」だけで実現するものです。サービス運用に携わるエンジニアの皆さんも、愛用している独自のワンライナーを持っているのではないでしょうか。「独自のワンライナー」とは、エンジニア各人のナレッジやノウハウが詰まっているとも考えられます。 本企画ではさまざまジャンルで活躍するエンジニア16人に、業務を支えてくれるワンライナーを紹介してもらいました。参考に使ってみるも良し。眺めて楽しむも良し。個性あふれる貴重な「オレオレ・ワンライナー」の数々をご覧ください! ※各カテゴリー内では所属企業名の50音順に掲載。回答者は敬称略とする。 リソース管理 プロセスを
EF15形は高性能な電気機関車であったが、引き出し性能が蒸気機関車に劣ると誤解されていた。 誤った運転方法により本来の性能を引き出せていなかったのである。 (spaceaero2 [CC BY 3.0], ウィキメディア・コモンズより) こんにちは、エムスリー・エンジニアリングG・基盤開発チーム小本です。 WEBサイトは RailsやSpringなどの「本体部分」だけでは完結しません。レポート作成・データ更新などの細かい処理も必要です。 過去にはこうした用途にはBashがよく使われました。しかし、Bashは落とし穴が多かったり、クラスなどの抽象化機能がなかったりして、規模が大きくなると辛くなります。 そこで、Bashの代替候補に挙がるのがPythonです。エムスリーでもかつてはBashを使っていましたが、現在は新規案件にはPythonを推奨しています。 しかし、実際にPythonで書き直そ
不慣れな環境を不意にいじった時にあるあるネタ。 とりあえずー とか言って勢いで書いたsetupスクリプトを実行してみたら意外と時間かかって、 ちょっと目を離した隙にsshの接続が切れちゃいました! 。。。ありますよね。ほんとよくありますよね。 そうなる予感はあったんだ なんて後の祭りです。ふとした油断から、screenもnohupすらも使わずにやってしまって、こんなことに。 shellがHUPしなかったからプロセスは生きてるものの、ログが見れないから進行状況がわからない。 うまく行ってるのかどうかモヤモヤした気持ちのまま、プロセスが終わるのをじっと待つ。。。 まぁ実に切ないです。 こんな時、いつも思うこと。 このプロセスの出力、もっかいstdoutに繋げられたらいいのに。。。 はい。というわけでつなげましょう。 長い前座ですみません。 切り離したプロセスを用意 #!/bin/bash wh
こんにちは、エンジニアリングGの中村です。 以前にこのブログにてエムスリーでの社内研修について紹介しました。今回は、この中でのbashスクリプティング講座の資料を公開します。 www.m3tech.blog 弊社の中でもいろいろな用途でbashが使われていますが、bashは簡単に利用できるもののプログラミング言語としてはバグを生みやすい、辛い言語だと思います。 ここで紹介しているのはいわゆるコーディング規則というよりも、バグ防止と可読性向上のためのルールをTips集的にまとめたものです。 bashにおいてまだまだ注意するところはありそうですが、多少なりともわかりにくいスクリプトの削減になればと期待しています。 [追記: 2018-08-22] はてブにて以下のコメントをいただきました。 bashスクリプティング研修の資料を公開します - エムスリーテックブログ bashで50行以上になった
ハマったのでメモ。 bash&zshでシングルクォートのエスケープをする場合はちょっとしたテクニックが必要らしい。 ダメダメ例 ダメダメなエスケープ。 % echo 'tanaka\'s OS' quote>残念ながら'tanaka\'で終わってしまう。 回避する。 エスケープするにはちょっとしたテクが必要。 % echo 'tanaka'\''s OS' tanaka's OS'\''という意味不明なエスケープをする。 何故か? 分解してみる。 % echo 'tanaka' \' 's OS' tanaka ' s OSシングルクォートの中で\'というエスケープが出来ないので、一旦文字列を終了し、\'を入力。もう一度文字列を再開する。 まとめ シングルクォートのエスケープはかなり面倒。 shも同様なので、シェルスクリプトを書く際は要注意。 ダブルクオートなら"tanaka's OS"だ
最終更新 2019-01-27 UNIX/Linux のシェル sh・bash・csh・tcsh のリダイレクトを説明する。ファイルへの出力、コマンド出力を別のコマンドの入力とする、標準入力・標準出力・標準エラー出力、パイプなどもあわせて説明する。
標準出力と標準エラー出力についてメモ 毎回調べ直すことになっているので、メモメモ。さらに調べるのにまとまったサイトがなくて1つ1つ調べるはめになるので。まとめ シェルによって違いがあるため今回はbashに限る 前提知識 【知識0】 unixコマンドは左から右に処理される。これは絶対 【知識1】 (標準入力 : 0) 標準出力 : 1 ※画面に出力される 標準エラー出力 : 2 ※画面に出力される 【知識2】 0,1,2はファイルディスクリプタと呼ぶ 【知識3】 「>」リダイレクト シェルの結果を出力する場所を指定可能 command ファイル・ディスクリプタ> 出力先 ※commandは何らかのコマンドかshファイルとしている 【知識4】 出力先などを特定のファイルディスクリプタに送りたい場合は「&ファイル・ディスクリプタ」とする echo "standard output" >&2 【知
現在、Red Hat Linux 9を利用しています。ホームディレクトリに「.bashrc」や「.bash_profile」というファイルがあるのですが、これは何でしょうか? ご質問にあるファイルは、どちらもユーザーのホームディレクトリに置かれ、シェルが起動するときに実行される初期化ファイルです。 シェルには、大きく分けて2つの役割があります。まず1つ目は、ユーザーがコマンドを実行するためのコマンドライン環境を提供し、ユーザーとOSの中枢であるカーネルとのインタフェースの役割を果たすことです。 もう1つは、ユーザーがログインを行った際に、環境を整えるためにさまざまなファイルを実行し、初期化を行うことです。初期化のために実行されるファイルはシェルの種類によっても異なり、今回ご質問にあるファイルはbash(Bourne Again SHell)が起動されるときに実行されます。 以下では、bas
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く