タグ

shellとzshに関するn2sのブックマーク (18)

  • bash の select は令和の時代も役に立つ, その一例 - ようへいの日々精進XP

    tl;dr man bash 例 若干の Kubernetes クラスタを選択したい Kubernetes Pod を選択したい 以上 tl;dr ホントにちょっとした運用ツールを bash で作っていて, 複数の選択肢をリストアップしてメニューとして選択出来るようにしたいなーと思っていたら, bash には select 文という超絶便利な構文が用意されていたので使ってみました. man bash https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html より引用させて頂きつつ, 重要だなと思ったところをかいつまんで. select name [ in word ] ; do list ; done in に続く単語のリストが展開され、要素のリストが生成されます。 展開された単語の集合が番号付きで標準エラー出力に出力されます。 「in

    bash の select は令和の時代も役に立つ, その一例 - ようへいの日々精進XP
    n2s
    n2s 2020/04/20
    zshにもある模様
  • BashとZshの “**” (globstar) の挙動の違い

    “**” (globstar) とは globの構文として使える、0個以上のディレクトリに再帰的にマッチするワイルドカードです。 例えば、a/**/zは a/z, a/b/z, a/b/c/z… にマッチします。 元々はzshで実装され、Zsh 2.2で**の形式として定着したようです1。 その後、Bash 4.0でもglobstarオプションを有効にすることで使えるようになりました2。 globの構文はPOSIX.2にも定義されていますが、そこには**は含まれていないため、処理系によって動作がまちまちになっています。 この記事では、bashとzshでの挙動の違いを紹介します。 BashとZshでの挙動の違い 次のようにディレクトリとファイルを用意し、bash、zshそれぞれでマッチするかどうかを確かめ、結果を表にまとめました。 環境はdocker ubuntu:focal、bash 5.

  • bash の危険な算術式 - どさにっき

    ■ bash の危険な算術式 _ 使ってる人がいちばん多いだろうからタイトルでは bash としてるけど、ここで取り上げることは zsh および ksh 一族(家 ksh、pdksh、mksh)にも該当する。ash、dash などでは該当しない。 _ 以下のシェルスクリプトには脆弱性がある。わかるだろうか。 #!/bin/bash # "品目,単価,個数" の形式の CSV を読んで、"品目,合計金額" の形式で出力する csv="foo.csv" while IFS=, read item price num; do echo "$item,$((price*num))" done < "$csv" これ、細工された CSV ファイルをわせることで、任意コードの実行ができてしまう。数ある脆弱性の中でもとくにヤバいやつだ。どこが穴なのかというと、タイトルにもあるとおり算術式なのだが、し

  • sourceコマンドを誤って使ってしまいゾッとした話 - Qiita

    「公開鍵を上書きするかどうか?」とか出てきて、 n として回避した後、今は無くなっているレポジトリから git clone しようとしたところで、アカウント確認のために処理が止まり、そこで、 Ctrl + c で強制終了できました。 解説 source コマンドは、ファイルに書かれたコマンドを現在のシェルで実行するコマンドです よって、私がミスして実行してしまった処理の内容は、 .zsh_history にファイルに書かれたコマンドが1行ずつ実行する。という内容になります。 .zsh_history には私が過去に打ったコマンドがすべて記録されているため、つまり、それらのコマンドが順に実行されていくということになってしまいます。 処理の途中で「公開鍵を上書きするかどうか?」を聞かれたのは、過去に公開鍵を作成するコマンドを実行し、それが .zsh_history に記載されていたためです。

    sourceコマンドを誤って使ってしまいゾッとした話 - Qiita
  • Bash/Zshで関数やaliasを無視してオリジナルのコマンドを使う方法

    B! 13 0 4 0 lsなんかをalias ls='ls --color=auto' とカラー表示をするようにaliasを作っていたりすることがあると思いますが、 この場合lsと打つと必ずこの引数がついてきてしまいます。 また、ラッパー関数的なものを元のコマンドと同じ名前で作ろうとした時、 そのまま中で同じコマンドを使うと無限ループに陥ります。 そういった時に元のコマンドを使う方法について。 優先順位 優先順位を無視して指定のコマンドを実行する方法 バックスラッシュでエスケープ クォートする コマンドを変数に代入する command コマンドへのパスを書いて実行 $(which command) builtin alias X=X まとめ 優先順位 シェルのコマンドとして実行されるものとして、 alias 関数 Bash等シェルのbuiltinコマンド(echoなど) PATHが通った

    Bash/Zshで関数やaliasを無視してオリジナルのコマンドを使う方法
  • シェルスクリプトでの関数の書き方について

    B! 19 0 0 0 シェルスクリプトで関数を定義する時、functionと付けても付けなくても 定義出来たりしますが、 その辺のしっかりとした定義について。 function foo or foo () foo () any-command foo () any-compound-command function foo { …; } function foo () { …; } function foo () other-compound-command まとめ function foo or foo () Bashなどのシェルスクリプトで関数を定義するには function foo { ... } の様にfunctionを前に付けて定義するか foo () { ... } の様にfunctionを使わずに後ろに()を付けて定義するのが通常です。 今まで作ってるスクリプト(Bash)

    シェルスクリプトでの関数の書き方について
  • shellの-cオプションについてUbuntuのsh(dash)、bash、zshはそれぞれ違う挙動をする - Qiita

    shellの-cオプションについて、全てのshellで同じ挙動だと思っていたら、shellごとに結構違う挙動を持っていたことが原因でハマったのでメモ shellの-cオプションについて manコマンドで見てみるとこんな感じ。 For sh(dash) ubuntuの場合shはdashという軽量シェルにリンクしています Read commands from the command_string operand instead of from the standard input. Special 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.) set from the remaining argument operands. For bash If the -c

    shellの-cオプションについてUbuntuのsh(dash)、bash、zshはそれぞれ違う挙動をする - Qiita
  • shellでTTL付きのキャッシュをしたい - Qiita

    こんな感じ sleep 3 ; echoの結果を最大5秒間キャッシュしている様子。 キャッシュの実装 実装はこのあたりに置いてある。 TTL付きのキャッシュを実装するにあたり、シェルで実現するならファイルに保存しておいて、作成日時はそのファイルのメタ情報を利用すれば楽。 また、やろうと思えば更新日時と作成日時がどちらも取れるので、細かいTTLの実装も可能。 stat -c %Yコマンドで指定したファイルの最終更新日時のepoch秒を取得できる。 それと現在時刻を比べて指定した時間より経過していたら...という処理を書くことでTTLを実装する。 statを使ってファイルの有効期限判定するには以下のようにする。 $ touch -d '1day ago' hoge.txt $ [ $(( $(date +%s) - $(stat -c %Y hoge.txt) )) -gt $((60 * 6

    shellでTTL付きのキャッシュをしたい - Qiita
  • bashのパラメータのブレース展開での拡張子・ディレクトリ名・ファイル名の取得・拡張子の置換 - それマグで!

    bash のbrace 展開で文字列を置換する 文字の置換は、bashはとても楽ちんである。 NAME=www.example.com echo ${NAME//./_} # www_example.com echo ${NAME//./_} # www_example_com これをもう少し掘り下げる。 bash でファイル名から拡張子を取出す方法 ファイル名から拡張子を取出すのはカンタンでした。 path=/etc/apache2/httpd.conf extension=${path##*.} #=> conf 魔法の記述方法 ${varname##*.} を使うと 手軽に拡張子を取得できる。 拡張子を書き換える方法 拡張子を書き換えるには、変数の書き換えを使えば直ぐ出来る。 f_name=httpd.conf txt_name=${f_name/.*/.txt} #=> httpd

    bashのパラメータのブレース展開での拡張子・ディレクトリ名・ファイル名の取得・拡張子の置換 - それマグで!
  • Linuxでextglobを有効にして「指定したパターン以外のファイル」を指定する | 俺的備忘録 〜なんかいろいろ〜

    仕事などで日常的にLinuxを利用しているのであれば、ほぼ大半の人がglobを利用した事があるだろう。 globという名前にはあまり馴染みが無いかもしれないが、以下のようにワイルドカードや複数のファイル名を指定したりする機能は使ったことがあるはずだ。 例)「/work」フォルダ配下のファイルを「/work2」に移動する mv /work/* /work2/ 例)「/work」フォルダ配下の「aaa.txt」「bbb.txt」のみを削除する rm /work/{aaa.txt,bbb.txt} このような指定方法を可能にしているのがglobという機能になる。 そんなglobを拡張したのが、今回紹介するextglobだ。 このextglobを利用すると、globでは指定が難しかった事、例えば"特定のフォルダ以外を指定する"といった事が簡単に行える。 bashやzshで有効になっているかどうか確

  • 今更ながら抑えておきたいシェルスクリプト用チートシート - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    今更ながら抑えておきたいシェルスクリプト用チートシート - Qiita
    n2s
    n2s 2014/06/19
    うむ、このあたりは本当にググラビリティが低くてかなわん。
  • 拡張 POSIX シェルスクリプト Advent Calendar 2013 - Adventar

    POSIX sh 以上の機能を備えた bash, ksh, zsh によるシェルスクリプトの話題。 なるべく外部コマンドに依存しないピュアシェルスクリプトを目指します。 sed, awk などのスクリプトが 80% 以上含むものはシェルスクリプトと認めません(老害)。…いや、嘘です、使います。 一人でやる予定だが未定。ネタください。

    拡張 POSIX シェルスクリプト Advent Calendar 2013 - Adventar
  • test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog 拡張 POSIX シェルスクリプト Advent Calendar 2013、15日目の記事です。 書くのが遅れ、ネタは尽きかけ、 マニアックさやニッチさが足りなくなってきているような気がします。 ふつうの内容ですみません。 今日は test, [, [[ コマンドの違いについてざっくり紹介します。 [[ がある bash, ksh, zsh ならば test と [ の使用は避け、 [[ を使用すべきです。 [ は慎重に使わないと様々な罠にかかるため危険です。 (翌日のネタも併わせてどうぞ) test と [ の違い どちらもシェルの組込みコマンドです。名前が違うのと [ は最後の引数を ] にしなければいけない縛りがある以外、 動作まった

    n2s
    n2s 2013/12/16
    「[[ がある bash, ksh, zsh ならば test と [ の使用は避け、 [[ を使用すべきです」
  • sh・bash・zsh 他 echo 比較 - mattintosh note

    Qiita に投稿しようと思ったけど書式エラーで貼れなかったのでこっちに貼っておく。 GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0) zsh 4.3.9 (i386-apple-darwin10.0) シェルおよびコマンドの種類 /bin/sh /bin/bash /bin/bash(xpg_echo) /bin/zsh /bin/zsh(bsdecho) /bin/echo(BSD ECHO) /opt/local/bin/gecho(GNU ECHO/MacPorts Coreutils 版) 比較項目 オプションフラグ タブ 改行 改行抑制 エスケープ文字 エスケープ文字(クオート展開) ユニコード指定 echo -n ${LINENO} echo -e ${LINENO} echo -E ${LINENO}

    sh・bash・zsh 他 echo 比較 - mattintosh note
  • Why Zsh is Cooler than Your Shell

    Jan 26, 2013623 likes1,105,497 viewsAI-enhanced description Z shell (zsh) provides many powerful features out of the box that can make the shell experience more efficient and productive compared to other shells like bash. Zsh includes advanced tab completion for commands like git, path expansion and replacement, right-hand prompts, spelling correction, powerful aliases, extended globbing, environm

    Why Zsh is Cooler than Your Shell
    n2s
    n2s 2013/05/12
  • AAA..ZZZ - jarp,

    ■ Taberarelooがインストールできない Taberarelooでreblogできなくなったので新しいのが出てるかと確認してみたら、 このアプリケーションはこのパソコンではサポートされていません。インストールは無効になりました。 とつれないメッセージが。どういうこと?Linuxじゃだめなの? OneTabもインストールできないしなんか壊れてるのかな。 今度まっさらなChromeを用意してやってみよう。 ■ パスワードにコンマを含めると面倒なことに CSVは元より区切りにコンマを使ってるのはよくある話で、mountの-oもそう。 mount.cifsでパスワードを指定するときは -o username=ユーザネーム,password=パスワード という形式なのでパスワードにコンマが含まれていると非常に面倒なことになる。 man mount.cifsしてみると Note that a

    n2s
    n2s 2013/04/07
    ほんとだ。{0..9}は展開するのに / zsh(1)のBRACE EXPANSION参照
  • 変数展開時の単語分割(word split)をマスターする - Qiita

    シェルスクリプトは、スペース区切りの文字列が代入された変数を展開するとき、文字列をスペースの位置で分割して複数の文字列のように扱う。この挙動は Bash (をはじめとする Bourne shell 系のシェル)と Zsh とで異なってくる。 普通の変数について Bash では、展開する変数をクォートしなければ単語分割が起きる。クォートすれば単語分割は起きず、スペースを含む1つの文字列として展開される。 Zsh では、変数をクォートするかしないかにかかわらず単語分割は起きない。ただし、 SH_WORD_SPLIT オプションをオンにすると Bash 準拠の挙動に変わる(デフォルトでオフ)。以下に単語分割の例を示す: ### 下準備 # 第1引数を echo する関数 function echo_first { echo $1 } # スペース区切りの文字列を含む変数 var="a b c"

    変数展開時の単語分割(word split)をマスターする - Qiita
  • UNIXシェルスクリプトメモ(Hishidama's UNIX shell script Memo)

    -xを付けると実行内容を表示しながら実行する。[2008-11-29] bash -x スクリプトファイル -nを付けると、実行せずにファイル内の構文解析(エラーの有無のチェック)を行う。[2008-11-29] bash -n スクリプトファイル . スクリプトファイル 現在実行中のシェルと同じシェルを使ってスクリプトを実行する。 スクリプトの中で環境変数を設定した場合、現在のシェルの環境にも影響する (スクリプトの中で定義した環境変数が実行元でも有効になる)。 ファイルに実行権限(chmod +x)が付いている場合は、以下のようにして実行できる(相対パスで指定している)。 ./スクリプトファイル ファイルに実行権限(chmod +x)が付いており、かつ環境変数PATHにカレントディレクトリ「.」が含まれている場合は、以下のようにして実行できる。 スクリプトファイル シェルスクリプトの書

  • 1