背景 シェルスクリプトを書くことが結構あるのでその備忘録代わりに記事を書いてみました。 特殊変数とは 特殊変数とは シェルによって自動的に値が設定される特殊な変数がいくつかあり、それら特殊な変数を参照することにより、様々な情報を取得することができる。 変数名 説明
俺の愛用ワンライナー、Web企業のエンジニア16人に聞きました エンジニアの皆さんが愛用する自作のワンライナーってどんなもの?Web企業で働くエンジニアの方々に、秘蔵のワンライナーを聞きました。 ワンライナーとは、何か特定の処理を「たった1行のプログラム」だけで実現するものです。サービス運用に携わるエンジニアの皆さんも、愛用している独自のワンライナーを持っているのではないでしょうか。「独自のワンライナー」とは、エンジニア各人のナレッジやノウハウが詰まっているとも考えられます。 本企画ではさまざまジャンルで活躍するエンジニア16人に、業務を支えてくれるワンライナーを紹介してもらいました。参考に使ってみるも良し。眺めて楽しむも良し。個性あふれる貴重な「オレオレ・ワンライナー」の数々をご覧ください! ※各カテゴリー内では所属企業名の50音順に掲載。回答者は敬称略とする。 リソース管理 プロセスを
※ 2018/07/21 追記。 お読みいただきましてありがとうございます! すみません、実はタイトルの割には「現在回しているイケてない運用をちょっとした工夫でサクッと改善する」ことを主眼としており、セキュリティのベストプラクティスではありません。。。 本稿の例で挙げているコマンドのリスクにつきましては、 注意 の項を追加しましたのでご参照ください。 公開当初は「10いいねくらいもらえたら嬉しいなー」と思っていた程度だったのですが、まさかここまでたくさんの方に読んでいただけるとは。。。 もっと内容を精査しておくべきだったと反省しております。。。 いいねやコメント等反応頂けるのはとても励みになります。ありがとうございます! TL;DR 怖いですよね、セキュリティインシデント。 インフラ系でお仕事をしていると、 Linux にログインして操作する手順書を作る事が多くなります。手順書の中には認証
はじめに bashシェルスクリプトの記述の仕方に関するメモ書きです。 ファイル入出力やパイプライン処理を中心に シェルが得意なのはファイル入出力やパイプライン処理なので、複雑な構文はできるだけ使わず、これらの使用を中心としたコードを書きます。 PATH コマンドごとにフルパスを変数に格納するなどは手間なので、必要な環境変数$PATHをexportしておきます。 それでも必要な場合はフルパスを変数に格納しておきます。 標準出力、標準エラー出力のリダイレクト 標準出力(1)、標準エラー出力(2)はデフォルトは画面になっています。 それ以外にエラーメッセージを定義する場合、標準エラー出力(2)にリダイレクトします。
原文は2015年8月22日時点のものを利用しており、それ以降に追記、更新されている可能性があります。 本翻訳は原作者の許可を得て公開されています。 Thanks for GreyCat! このページはBashプログラマーが陥りがちなよくあるエラーについてまとめました。以下の例は全てなんらかの欠陥があります。 クオートをいつも使い、どんな理由があっても単語分割を使わなければ、多くの落とし穴からあなた自身を守ることができます!単語分割はクオート表現をしない場合にはデフォルトでオンになっている、Bourneシェルから継承された壊れたレガシーな設計ミスです。落とし穴の大半はクオートされていない展開になんらか関連し、単語分割しその結果をグロブします。 1. for i in $(ls *.mp3) BASHプログラマーたちがループを書く際にもっとも犯しがちなよくあるミスは以下のような感じです。: f
#!/bin/bash exec 5> debug_output.txt BASH_XTRACEFD="5" PS4='$LINENO: ' set -x するとdebug_output.txtにログが出力される。 exec 5>はファイルディスクリプタ5番をdebug_output.txtにするという意味。 PS4はトレース出力の際に表示されるプロンプト。$LINENOにより行番号を表示している。 set -xは実行するコマンドをトレース出力させる。 元記事にはbashdb、log4bash、Eclipse、Visual Studioo Codeを使う方法なども紹介されているが、これが一番手軽でほとんどの場合十分だと思う。 Register as a new user and use Qiita more conveniently You get articles that match
はじめに 以前書いたエントリー、重大な脆弱性(CVE-2017-5932)で少し話題になったbash4.4の補完機能の便利な点で、bash4.4からでないとタブの補完機能のソート処理が制御できないという問題について、ソースコードレベルで調べた結果をまとめていたのですが、bashの実装そのものを深く掘り下げ過ぎてしまい、内容が膨大になったので、何回かに分けて書こうと思います。 今回はbashが起動されてからインタラクティブモードでキーボードの入力を待ち受けるまでのお話です。普段使っているbashがどのような処理を行っているのか一緒に覗いてみませんか? 検証ソースコード Bash version 4.1.0(1) release GNU bashの生誕 bashのプロセスが起動されるのはOSへのログイン時にユーザーのログインシェルがbashに設定されている場合、あるいはログイン後に明示的にba
すこし記事が長いため、簡単なアウトラインを書いておきます。要点だけ掴みたい場合は、最終項の「まとめ」を読むのがいいかもしれません。 コマンドライン引数の一般的な解析手法 それぞれの特徴 〜 getopt と getopts の違い getopts(メリット・デメリット) getopt(メリット・デメリット) 自前で解析しちゃう(唯一のデメリット) まとめ ============================= コマンドライン引数を処理する一般的な手法として、 getopts getopt shift などで自力で解析 といった具合に、上から順に考えつくかと思います。getopt(3) は UNIX において、コマンドの引数を処理する一般的な C 言語のライブラリ関数です。それを用いて実装されたコマンドが getopt(1) です。Bourne シェル系だと内部関数になりますが、同系統の
自分用にメモしておく コマンド実行 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
序文(飛ばしてよし) まず話は僕が書いてたスクリプトで、引数から"最後の"値だけを分離したものを使いたかったってのが始まりです。 最初の引数の分離なら shift でいけるんだが、最後をいきなり分離するのが直接は出来ないっぽいので、格闘の結果以下のように解決しました。 #!/bin/sh ARGS=("$@") echo "最後以外: ${ARGS[@]:0:((${#ARGS[@]}-1))}" echo "最後のみ: ${ARGS[((${#ARGS[@]}-1))]}" echo "最後のみ: ${ARGS[-1]}" # bash-4.2 以降なら負のインデックスが使える! 以下が上記スクリプトの実行結果です。 $ ./test.sh a b c d 最後以外: a b c 最後のみ: d やっていることは、まず引数をARGVという配列変数に詰めなおして、その後配列変数に対するスラ
[速報]マイクロソフト、BashシェルをWindowsに搭載。Emacs、VT100などサポート。Build 2016 マイクロソフトは開発者向けの年次イベント「Build 2016」を米サンフランシスコで開催しています。初日の基調講演では、Windows 10が登場して1年を記念した大型アップデート「Windows 10 Anniversary Update」を発表。 その中で、UNIXやLinuxで使われているシェルの1つ「Bash」がWindowsに搭載されると発表がありました。 本物のBashがWindowsで走る Kevin Gallo氏。Corporate Vice President, Windows and Devices Group。 Bash on Windowsを発表する。 これは本物のBashだ。仮想マシンでもクロスコンパイルされたツールでもなく、ネイティブのUbu
次に以下の二カ所について解説します。 ひとつはスクリプトの先頭の関数宣言の部分で、もう一つは、スクリプトの最後の終了処理の部分です。 function usage() { message=`cat <<EOF About this script: Backup script for files Usage: ${0} targent_file_name [backup_file_name] target_file_name : file to backup backup_file_name : backup file name default file_name is date and time based file_name yyyymmddhhmmss.tgz like 20140101000000.tgz EOF ` echo "${message}" return 0 } func
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く