タグ

shellに関するcmd08のブックマーク (23)

  • シェルスクリプトの set -e は罠いっぱい

    ふみやす@シェルまおう(自称でない) FGO:838,149,789 @satoh_fumiyasu Perl では最初に use strict; use warnings すべきなように、シェルでは set -u すべき。「例外処理って何? おいしいの?」って人は set -e もしておけ。 2012-06-25 18:25:20 ふみやす@シェルまおう(自称でない) FGO:838,149,789 @satoh_fumiyasu シェルスクリプトをまともに書けない奴は、それでも書かなければならないときは、とりあえず変数展開するとき必ずダブルクォートで括れよ。$foo じゃなくて "$foo” な。あと最初に set -u; set -e でもしておきな。シェルスクリプトが駄目なんじゃなくて、書けないだけ。 2012-12-22 00:27:38

    シェルスクリプトの set -e は罠いっぱい
    cmd08
    cmd08 2017/04/28
  • 何度も同じコマンド調べ直すのやめませんか? - Qiita

    タイトルに煽りが足りない!と指摘を受けたので頑張って変えてみました。 pet というツールを作ったら公開して3日でStarを1000も頂きました。当に感謝です。 対象の方 「あーあのコマンド何だっけ。前も調べたけど忘れちゃったからまた調べよう...」 となる人 対象じゃない方 「Ctrl-rで検索すればすぐ見つかるし、よく使うコマンドはaliasに登録してるから全然問題ない」 という人 デモ 色々と書く前に動画を見てもらえれば雰囲気がつかめると思います。 詳細は以下のREADMEに書いてあります。ちなみにDescriptionは日語でも動きます。 https://github.com/knqyf263/pet 概要 僕はいつも「あのコマンドなんだっけ...」となってしまいます。 もちろんpecoとか利用させていただいているのでコマンド履歴からの検索はしやすくなっているのですが、以下のよ

    何度も同じコマンド調べ直すのやめませんか? - Qiita
    cmd08
    cmd08 2017/03/24
  • 原理原則で理解するbashの仕組み - Qiita

    はじめに 以前書いたエントリー、重大な脆弱性(CVE-2017-5932)で少し話題になったbash4.4の補完機能の便利な点で、bash4.4からでないとタブの補完機能のソート処理が制御できないという問題について、ソースコードレベルで調べた結果をまとめていたのですが、bashの実装そのものを深く掘り下げ過ぎてしまい、内容が膨大になったので、何回かに分けて書こうと思います。 今回はbashが起動されてからインタラクティブモードでキーボードの入力を待ち受けるまでのお話です。普段使っているbashがどのような処理を行っているのか一緒に覗いてみませんか? 検証ソースコード Bash version 4.1.0(1) release GNU bashの生誕 bashのプロセスが起動されるのはOSへのログイン時にユーザーのログインシェルがbashに設定されている場合、あるいはログイン後に明示的にba

    原理原則で理解するbashの仕組み - Qiita
    cmd08
    cmd08 2017/03/22
  • bashのそれって実はこういう書き方できるよ一覧 - Qiita

    bashで普段こう書いているけど、実はこういう書き方もあるんですよというのをまとめてみました。 ->の右側がmanに載ってるテク名です。 例えばどういったものが書けるかはガチャガチャした前回の記事で…。 `command` -> Command Substitution 書く量は増えるけど、視認性が良い(ネストした時が特に)。 尚、これは書き方が違うだけでどっちもCommand Substitutionです。

    bashのそれって実はこういう書き方できるよ一覧 - Qiita
  • bashの組込みコマンド自作によるスクリプトの高速化 - Qiita

    はじめに bashには次の2つの理由によって、組み込みコマンド(builtin command)というものが存在します。 スクリプトの高速化のため。組み込みコマンドであれば通常のコマンドを実行する場合に比べてプロセスの生成コスト(fork()/exec())が削減できる bash自身の状態を変更させるため。例えばcdコマンドを/bin/cdとして用意してbashから当該コマンドを実行しても、当該コマンドのpwdが変更されるだけで、bashのそれは変更されないため、意味がない 今回は前者に焦点を合わせて、その効果と、組み込みコマンドの自作方法について述べます。 予備知識: 組込みコマンドによるスクリプト高速化の効果 組込みコマンドそのものの存在、及びその存在意義について既にご存知のかたは、この節を飛ばしてもらって構いません。 例えば皆さんがbashスクリプトからechoコマンドを実行した場合

    bashの組込みコマンド自作によるスクリプトの高速化 - Qiita
    cmd08
    cmd08 2017/01/18
  • Man page of FIND

    Section: User Commands (1) Index JM Home Page roff page 名前 find - ディレクトリ階層内のファイル検索 書式 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression] 説明 このマニュアルページは GNU 版 find の使用法を説明しています。 GNU find は、 指定された検索開始ポイント (starting-point) を基準にして、 ディレクトリツリーを検索します。 そして優先規則に従って (「オペレーター」のセクション参照)、 指定された式 (expression) を左から右の順で評価していきます。 たとえば、 and 演算で左辺が false になった場合や、 or 演算で左辺が true になった場合のように、

    cmd08
    cmd08 2017/01/18
  • find の -permを使う tips - ダイミテイ

    findの中でも有用なのだが使いにくいものに -perm オプションがある。fileの permissionを条件にするものだ。 という書き出しにしてみたが、そんなに permオプション使うかな、正直なところ。このまえ、自分が読めないファイルを見つけるために find . ! -perm +044とかやったけど*1。それ以前に使ったのは1ヶ月前だしな。でも弾さんのblogでネタ振りしてくれたんで勉強がてらくらいついておこう。 前提 こんなスクリプトで "test" ディレクトリ以下に 512個ファイルを作っておく。 #!/usr/bin/perl for ($i = 0; $i < 512; $i++) { $_ = sprintf("%03o", $i); s/0/---/g; s/1/--x/g; s/2/-w-/g; s/3/-wx/g; s/4/r--/g; s/5/r-x/g;

    find の -permを使う tips - ダイミテイ
    cmd08
    cmd08 2017/01/18
  • 特定ディレクトリ以下を除いた find をする方法 - hogehoge @teramako

    find . -name "foo" -prune -o -print 同僚から、あるディレクトリ配下で特定ディレクトリ配下を排除したファイルリストが欲しい、何か方法はない? と訊かれた。find の !使えば良いじゃんと思ったが、前提として環境はAIX*1だ。-pathオプションがない。-pathオプションがあったとしても、find . ! -path "*/foo*"では排除したくないfoobarディレクトリも排除してしまう。 悩みつつはじき出したのがこれ。 まぁ悩んだと言っても実はManpage of FINDの-pathの項に書いてあったのを使っただけだが。ただ、上記例でうまくいく理由を考えることででfindの奥深さを味わった。思わぬ課題を出してくれた同僚に感謝。 findの奥深さ -pruneというのは条件に一致したディレクトリ配下は検索しないオプションだ。ただし、そのディレクト

    特定ディレクトリ以下を除いた find をする方法 - hogehoge @teramako
    cmd08
    cmd08 2017/01/18
  • シェルスクリプトの罠を避ける三つの tips

    シェルスクリプトは、Unix 系環境で仕事をするエンジニアなら誰もが一度は書くであろうにもかかわらず、書き方や特性を熟知している人が少ない言語です。この記事は、シェルスクリプトを書くときに罠を踏まないようにするために最低限あなたが気を付けるべき tips 集です。「たかがシェルスクリプト」とは思わないでください。生半可に書かれたシェルスクリプトはあなたの (チームの) 生産性をかえって低下させます。 Shebang に bash を明示しろ Bash でしか使えない機能のことを俗に Bashism と言います。Bashism はもちろん Bash 以外のシェルでは動きません。これに関するありがちな罠は、以下のように発生します。 Bash が /bin/sh として使われている環境でシェルスクリプトを書く。うっかり Bashism がシェルスクリプトに含まれていても、 /bin/sh は何も

    シェルスクリプトの罠を避ける三つの tips
    cmd08
    cmd08 2017/01/15
  • Googleの肩に乗ってShellコーディングしちゃおう - Qiita

    はじめに GoogleさんがShellスタイルガイドを共有していたので、いくつか気になった点をピックアップしました。 自分のShellスタイルはかなり我流なので、自省の意味も込めてコメントも併記します。 Googleスタイルガイドの元ネタ (Python/C++/Java/Rとかだけでなくdocumentガイドなど色々あります) https://github.com/google/styleguide Shellスタイルガイド (今回はこちら) http://google.github.io/styleguide/shell.xml 当は人間がチェックするのではなくcpplintのためXML定義なのかもですが、気にしない気にしない。 (見たところcpplintc++だけだと思ってます) commitフックでshell系のlint走らせろっていうのが今風なのかもしれませんが、キニシナイキ

    Googleの肩に乗ってShellコーディングしちゃおう - Qiita
    cmd08
    cmd08 2017/01/09
  • find コマンド | コマンドの使い方(Linux) | hydroculのメモ

    find コマンド 2015/05/25 ディレクトリの中を再帰的にたどってファイルを検索してきてくれるコマンド。タイムスタンプやファイルサイズ、ファイル名など、さまざまな条件で検索でき、検索条件はオプションで指定する。検索結果を出力するだけでなく、他のコマンドに引数として渡すこともできる。 基的な使い方 2016/06/16 検索対象となるディレクトリ、検索条件、アクションの順にコマンドライン引数で $ find ディレクトリ 検索条件 アクション というように指定する。 ディレクトリを省略すると、カレントディレクトリが対象になる。 検索条件を省略すると、すべてのファイル・ディレクトリがマッチするようになる。検索はファイルだけでなくディレクトリも対象である。 アクションを省略すると、-lsアクションの扱いになり、単純に見つかったファイル・ディレクトリのパスが改行区切りで出力される。 従

    cmd08
    cmd08 2017/01/08
  • xargs コマンド | コマンドの使い方(Linux) | hydroculのメモ

    xargs コマンド 2015/05/13 ファイル名の一覧を標準入力から受け取って、そのファイル一覧を任意のコマンドに引数として渡すコマンド。ファイル一覧でなくてもなんでもよい。 わかりづらいので、例として、カレントディレクトリの配下にある拡張子が .txt のファイルをすべて削除したいとする。 まずはfindコマンドでリストアップする。 $ find . -name "*.txt" この結果が以下のようだったとする。 foo.txt sub/bar.txt これらを削除するには $ rm foo.txt sub/bar.txt を実行すればよいが、findの結果が大量にある場合はrmコマンドを手で書くのは手間なので、 findの結果をそのままrmに渡したい。rmコマンドが標準入力からファイル名を受け取ってくれるならパイプでつなぐだけだが、残念ながらrmにはパラメータで渡す必要がある。こ

    cmd08
    cmd08 2017/01/08
  • 割りと便利だけど微妙に忘れがちなbashのコマンド・チートシート - Qiita

    自分用にメモしておく コマンド実行 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のコマンド・チートシート - Qiita
    cmd08
    cmd08 2017/01/08
  • bashの使い方のまとめ記事のインデックス - それマグで!

    bash の使い方を1から見直すシリーズ シェルスクリプトは、もうbashで書いていいよね。bashが動かない環境なんてないんだし。 bash の紛らわしい記号や歴史的経緯によるPOSIXかき分けなどがあって、bashに特化した記事って少ないし断片的なので、色々と調べたことを再構成してまとめて記事にしました。 私自身 [[ / [ の違いが全然わからないので調べ始めました。その結果あれこれ知見が得られたので書きながら復習をしていました。 気づけば、bash の教科書的なものになってしまいました。 何かの役に立てばいいと思って記事のインデックスをまとめておきます。まだ一部書けてないですがそのうち書きます。 はじめに はじめに bashとPOSIX bashが動く環境 zshとの比較 変数と配列と数値計算 変数 配列のまとめ 組込 let による数値計算とインクリメント 連想配列(assoc

    bashの使い方のまとめ記事のインデックス - それマグで!
    cmd08
    cmd08 2017/01/07
  • UNIX & Linux コマンド・シェルスクリプト リファレンス

    目次 当サイトについて bash シェルスクリプト入門 -シェルスクリプトのいろは- コマンド Tips シェルスクリプト Tips 変数を使用する 配列を使用する 入力と出力 if 文と test コマンド for 文の使用方法 while 文の使用方法 case 文の使用方法 関数の使用方法 引数を処理する 終了ステータス シグナルと trap コマンド フィルタを使用した文字列操作 1 フィルタを使用した文字列操作 2 日付を取得する 文字コードと改行コード シェルスクリプトのデバッグ AWK リファレンス (Deprecated) シェルスクリプト ライブラリ 『ether.sh』 お知らせ Bluesky を始めました @sunone.me 変更履歴 2023.10.07 ページ内リンクを修正した。 2021.02.01 このサイトに「もう 1 ページ追加しよう」と思ってから、も

    UNIX & Linux コマンド・シェルスクリプト リファレンス
  • /bin/shと/bin/bashの違い(とcronでのシェル)

    B! 29 0 1 0 シェルスクリプトを書く時にShebangに#!/bin/shの様にシェルの指定をしますが Bashの機能を使いたい場合はきちんとbashを指定しないといけません。 その辺の違いは早いうちに気づくことがあると思いますが、 cronの中でのシェルについてちょっと見落としていたのでその辺について。 /bin/shと/bin/bash RedHat系やMacなどでの/bin/sh UbuntuなどDebian系の/bin/sh シェルスクリプトに書くShebang cronジョブの時に使われるシェル /bin/shと/bin/bash RedHat系やMacなどでの/bin/sh RedHat系のLinuxで/bin/shを見てみると、 $ ls -l /bin/sh 0 lrwxrwxrwx 1 root root 4 Sep 27 2014 /bin/sh -> bas

    /bin/shと/bin/bashの違い(とcronでのシェル)
    cmd08
    cmd08 2016/12/22
  • プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 - Qiita

    記事が切っ掛けとなってお声がけを頂き、記事の増補リファイン版となる記事をSoftwareDesign 2018年1月号のシェルスクリプト特集第2章として執筆しました。リファイン版には、この記事で触れていない文法面での分かりにくさについての解説が含まれています。その文法面での分かりにくさの解説の一部に相当する記事もありますので、ぜひそちらも併せてご覧下さい。 Shell Script Advent Calendarをご覧の皆様、図々しくも5日目に続く2度目のエントリーのPiroです。 前回は自作のBashスクリプト製Twitterクライアントをネタに実装を解説しましたが、今日は他の言語で多少のプログラミング経験はあるんだけど、どうにもシェルスクリプトは苦手だ……という人のための、シェルスクリプトによるプログラミングの勘所を解説してみようと思います。多分、プログラミング入門レベルの人や上級

    プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 - Qiita
    cmd08
    cmd08 2016/12/08
  • 単純作業を自動化して人類の無駄な時間をなくそう - 竹迫の近況報告

    このエントリーは Recruit Engineers Advent Calendar の 5日目の記事です。 www.adventar.org 目次 自己紹介 時間は有限、大切に使おう sshで30台のサーバをセットアップする expect コマンドを使おう StrictHostKeyChecking no chpasswdでパスワード設定 chmod u+sとSUID seqコマンドとbash拡張構文{1..9} Excel業務を自動化しよう Win32::GuiTest でキーボード入力を自動化 MouseMoveAbsPix でマウス操作を自動化 マインスイーパーの自動化 BadUSBによるキーボード入力の自動化 まとめ 1. 自己紹介 @takesakoです。最近、まつもとゆきひろさんと岸川克己さんが技術フェローと技術顧問に就任した会社で専門役員を担当しています。 会社ではホールデ

    単純作業を自動化して人類の無駄な時間をなくそう - 竹迫の近況報告
    cmd08
    cmd08 2016/12/06
  • PHPで外部のシェルコマンドを実行するサンプル - 感謝のプログラミング

    実行演算子(``)というのがあって、これは外部のシェルコマンドを実行するための演算子である。 バッククオートで囲まれた部分がシェルのコマンドとして実行される。 返り値が、シェルを実行した結果になる。 shell_exec()関数と同じこと。 これを使えば、linux上なんかで、バッチみたいにPHPを使うことができる。 コード例はこんな感じ。 #!/usr/bin/php <?php $result = `ls -ltr *`; echo $result, PHP_EOL; echo "------shell_exec()------",PHP_EOL; $result2 = shell_exec("ls -ltr *test*"); echo $result2, PHP_EOL; 実行した結果はこちら。 # /usr/bin/php sample.php -rwxr-xr-x. 1 roo

    PHPで外部のシェルコマンドを実行するサンプル - 感謝のプログラミング
  • ファイルやディレクトリのパーミッションを一括で置換したい - Qiita

    追記 2015/01/09 13:00: コメントで、さらにスマートな書き方をお教えいただきました。ありがとうございます! 追記 2015/01/10 02:20: 更にコメントで、そもそもfindを使わずchmodだけで実現する方法をお教えいただきました!qiita、すごいです。 例えば、/path/to/dir以下のディレクトリのパーミッションを変更したいとき、 などとやると、/path/to/dir以下にあるディレクトリはもちろん、ファイルのパーミッションまで755になってしまいます。644にすると、ディレクトリも644になってしまって困ります。手動でディレクトリのパーミッションだけ直すのも何だかスマートではありません。 ディレクトリは755、ファイルは644に一発で置換したい、というときはこんなのがよい、とこちらの記事のコメントで紹介されておりました。

    ファイルやディレクトリのパーミッションを一括で置換したい - Qiita