タグ

bashとzshに関するn2sのブックマーク (29)

  • 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 ファイルをわせることで、任意コードの実行ができてしまう。数ある脆弱性の中でもとくにヤバいやつだ。どこが穴なのかというと、タイトルにもあるとおり算術式なのだが、し

  • 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)

    シェルスクリプトでの関数の書き方について
  • bashからzshに移行してみたときのメモ - Qiita

    普段はCygwinからLinux系のサーバに接続して作業しているので、以下の記事はCygwinを前提として書いてます。 ですが、「インストール」のところ以外はUbuntuとかの他のLinux系OSでも問題なく動くと思います。 bashからzshへ移行してみた Linuxディストリビューションで、幾つかあるシェルの中でも初期装備として採用されることの多いbash。 以前は特に不満なところはなかったのですが、最近似たような名前のディレクトリやファイルが増えてきてしまい、Tab補完の恩恵を十分に受けられなかったり、タイプミスが頻発したりしてました。 そこで、シェルの一種であるzshの記事を偶然目にし、それによるとbash以上にTab補完が強力ということなので試しに導入 zshの設定諸々 インストール

    bashからzshに移行してみたときのメモ - Qiita
    n2s
    n2s 2017/11/08
  • 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
  • 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のパラメータのブレース展開での拡張子・ディレクトリ名・ファイル名の取得・拡張子の置換 - それマグで!
  • ZshでもBashでも動くfunctionを書くときのストレスを減らそう - Qiita

    この記事は zsh Advent Calendar 2015 3日目のために書かれました. Zsh には様々なオプションが存在します.オプションの中にはシェルが与えられたコマンド列をどう解釈するのかどうかに影響するものがあります.それらのオプション次第では,同じバージョンの Zsh であっても異なる挙動を示すことになってしまいます. さらに Zsh 以外のシェルで実行する場合は,当然のことながらオプション次第では互換性を失ってしまう構文が存在します. そこで今回は Zsh 以外のシェルとして Bash を取り上げつつ,オプションや書き方を調整することで,自分の設定が反映されていない Zsh でも Bash でも動くようなfunctionを変なところでハマらずに書けるようにしましょう. はじめに Zsh のオプションの設定にはsetoptやset -oなどが存在しますが,今回はsetoptで

    ZshでもBashでも動くfunctionを書くときのストレスを減らそう - Qiita
    n2s
    n2s 2015/12/04
  • 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で有効になっているかどうか確

  • zshが無いと死ぬ人がbashでなんとかする - ろば電子が詰まつてゐる

    ※この記事は、zsh Advent Calendar 2014 - Qiitaの19日目です。 zsh無しにbashで生きる zsh大好きな皆さんは、bashを心の中のどこかでバカにしているのではないでしょうか。しかし最近のbashは、いろいろとzshを意識している(?)雰囲気があり、zsh特有だと思っていた機能が実はbashでも使えたりします。 そのため、 zshを使えないと全身から血を吹き出して死ぬ ログインシェルとしてzshが起動されないと発狂して死ぬ 「最近はSolarisにだってzshが入っている」と一日100回は唱えないと死ぬ zsh神社が欲しい、参拝したい という人でも、bashがあれば多少の延命ができるかもしれません。稿では、zshが無いというサバイバル環境下において、bashでなんとかすることをテーマにいくつかサンプルを挙げてみます。 なおここでは、bashのプロンプト

    zshが無いと死ぬ人がbashでなんとかする - ろば電子が詰まつてゐる
    n2s
    n2s 2014/12/19
  • zshとbashでは変数の単語の分割ルールが違う - Qiita

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

    zshとbashでは変数の単語の分割ルールが違う - Qiita
  • bashで間接的な変数参照 - jarp,

    ■ trで文字列の繰り返し aからmを0へ、nからzを1へ変換したいとする。 trでやるならこんな感じになる。 % bash -c 'echo {a..z}' | tr a-z 00000000000001 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 足りない分は最後の文字が使われるので、 1はまあそれでいいんだけど、0を何とかしたい。 % bash -c 'echo {a..z}' | tr a-m 0 | tr n-z 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 2回に分けるのはわかりやすいが、man trしてみたら [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0 という記述

    n2s
    n2s 2014/07/21
    zshでは${(P)foo}、bashでも${!foo}でシンボリックリファレンス的なことができる、と
  • 今更ながら抑えておきたいシェルスクリプト用チートシート - 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
    うむ、このあたりは本当にググラビリティが低くてかなわん。
  • bashで連番生成 - Qiita

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

    bashで連番生成 - Qiita
    n2s
    n2s 2014/01/07
  • 拡張 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
  • zshの配列アクセス方法をbashと同じようにする - jarp,

    Androidrubyを作る akrさんからmake-standalone-toolchain.shすれば--sysroot不要との情報を得た。 % $NDK_ROOT/build/tools/make-standalone-toolchain.sh --install-dir=$HOME/android/arm-linux-androideabi として、PATHに$HOME/android/arm-linux-androideabi/binを加えればok。 rubyはtrunkを使うのでtrunk版rubyもインストールしておく。 あとはこんな感じで。 % trunk=/some/where/ruby/trunk % mkdir trunk-android % cd trunk-android % ac_cv_func_getpgrp_void=yes ac_cv_func_se

    n2s
    n2s 2013/10/20
    bash, ksh, Perl, Rubyと異なりデフォで配列のindexは1から。bashとの非互換性の中でもこれはどうにかならんかったのかと。setopt ksh_arrays必須。
  • bash で頻繁に利用するディレクトリをブックマークする - Qiita

    コンソール上で開発をする人はお分かりだと思いますが、頻繁に利用するディレクトリが深い位置にあるとイライラしますよね。毎回タイプするわけにもいかないし、履歴をたどるにしても git などを利用しながら開発をしていると、簡単に埋もれてゆきます。ホームにシンボリックリンクを貼る、またはエイリアスを登録するなど解決法はありますが、数が増えると各所が汚れていきますし、スマートとはいえません。 そこで、以上を解決するスクリプトを作成しました。bash で動作するディレクトリ専用のブックマーカーです。 シェルプログラミングの勉強を兼ねての作成なので、バグやコードの改善などがあればぜひ教えて下さい。 ダウンロード b4b4r07/bashmark · GitHub インストール

    bash で頻繁に利用するディレクトリをブックマークする - Qiita
    n2s
    n2s 2013/09/25