bash
keyamb.hatenablog.com ココらへんを参考に、peceでhistoryをいい感じにしてみた。 しかし、 READLINE_LINE を読めるものの、上書きできずハマっていた。 どうも、sdkmanが悪さしているようだった。 .bashrc の最後で sdkman-init.sh を実行していたのだが、…
macでechoの出力に色付けたいのに付かない! coreutils入れたのに! と悩んでたら、なんと、echo は bash builtin にもあり、フルパス指定するかaliasしないとbuiltinが使われるということを今更知った… コマンドを探す優先順位はこちら。 “応用力”をつける…
shebang に #!/bin/sh と書いてたり、 sh hoge.sh とかで実行した際、ときどきbash以外のshellが起動されるのか、process substitution のコードがエラーになることがある。 #!/bin/bash とか bash hoge.sh とかすると動いた。
which や whereis でコマンドのパスが出ないんで「なんだろうな?」と思ったが、よく考えたら .bash_profile で定義しているbash関数だった。 関数の定義は以下で確認できる。 declare -f [function name]
知らんかった… $ for i in {1..10}; do echo $i ; done 1 2 3 4 5 6 7 8 9 10 更にゼロパディングしたい場合は、 $ for i in {01..10}; do echo $i ; done 01 02 03 04 05 06 07 08 09 10
hogem.hatenablog.com /etc/inputrc の書き方が前から謎だったのだが、emacs風の指定の仕方ができるらしい。 例えば、 $if mode=emacs … "\C-d": kill-word $endif のように、「"\C-d": kill-word」というのを入れたら、Ctrl+d すると単語単位で削除できるよ…
#!/bin/sh CONF=$(cat<
$ cat <(cat <(echo hoge)) hoge なんてことをふと思いついて試してみた今日のお昼前。
gitbash で"ctrl+→、←"を forward-word、backward-word に割り当てたかったんだが、linuxだとこれでいくのか? https://github.com/spring-projects/spring-shell/issues/53 gitbash では効かず…ちなみに、\e[1~ みたいな記法の意味を調べてみたんだが、ここ…
shellのモジュールでエラーが発生した時、 trap して LINENO 変数とか参照すると、モジュールでの行数とか出てきて分かりづらい。 なんかいい手は無いのかな?実行中のファイルを参照できる変数とかないのか?($0だと親シェルのファイル名が出る)test.sm t…
例えば #!/bin/sh set -e echo hoge | error | : echo "Couldn't catch error." を実行すると、 sh test.sh test.sh: line 5: error: コマンドが見つかりません Couldn't catch error.trapしても #!/bin/sh trap 'echo "Error at line ${LINENO}. Command: $…
getoptsではロングオプションは使えないということになっているが・・・ while getopts "\-:" opt do case $opt in -) # long options case $OPTARG in help) print_help;; *) echo "unknown option: $OPTARG"; exit 1;; esac;; ?) if [[ $opt = "?" ]]; the…
いつの頃からか sudo するとデフォでは環境変数がクリアされるようになったらしい。 sudo -Eとすれば実行時の環境変数が引き継がれる。ちなみに、環境変数の確認のために sudo echo $hogeとかやって、事前にexportしてた中身が見れたものだから「引き継がれ…
command | while read … do cmd1 if [ $? -ne 0 ]; echo "error!" exit 1 fi done とかやってもexitしてくれないし、retrun 1 とかしても return してくれない。 whileループが子プロセスで実行されるかららしい。しかし、exit とか return すると、ループの…
タブ区切りでスペース含むカラムがあるファイルを処理したくて、 IFS=$'\t' while read ・・・ do ・・・ done < filename とかやってたら、 cmd="command --opt" $cmd ${params} とかした時に、cmd内のスペースも丸ごと一つの文字列と扱われてしまい、「"co…
皆さん、bashでよく result=`command` ret=$? みたいにしてエラーハンドリングされてると思いますが、もしこれが関数内で local result=`command` ret=$? みたいにしたらどうなると思います? 実は、$? は必ず0になってしまうのですよ!! local がコマンド…
基本、以下に準ずる。シェル/コーディング規約 - techmemo http://sya.cswiki.jp/index.php?%E3%82%B7%E3%82%A7%E3%83%AB%2F%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%8F%E7%B4%84シェルスクリプト Tips - UNIX & Linux コマンド・シェ…
また、status code は trap する前の status code になるらしい。 $ cat test.sh trap "echo \"exit code: $?\" " EXIT fuga $ ./test.sh ./test.sh: line 3: fuga: command not found exit code: 0 $ echo $? 127 $また、trap で実行するコマンドでエラーが…
こんなんできんのや・・・知らんかった・・・while read -a arrayで各カラムを配列に代入できるそうな。ついでに見つけたんだが、bash4は連想配列が導入されたりと、bashも進化を続けているらしい。時々、調べながら仕事したほうがいろいろ改善できそう。
some_command \ while read line do (do something) result=(some variable) doneecho $result上記のようなコードを実行すると、最後の行の「echo $result」の実行結果は必ずNULL(空行)になってしまう。 おそらく、some_command とともに、while read の部…
スクリプトの中でsource env.confみたいに書くと「ファイルがない」と怒られる。source ./env.confとしないとダメ。 コマンドラインでは前者でも通るのに・・・
■bash の read で空文字のカラムがある場合、そのカラムの存在は無視され、右から詰められてしまう。 例えば、while read col1 col2 col3 ・・・のようなスクリプトが標準入力からhoge\t\tfugaのようなレコードを受け取った場合、 col1="hoge", col2="", col…
bash のexec は、プロセスをforkするのではなく、そのプロセスの中でコマンドを実行する、と・・・ 始めて知った・・・ スクリプト書いてる時、いろいろとエラーハンドリングとかで困ってたの、これ使えば解決できたかも・・・
数値演算だけでなく、パターンマッチングや文字列の長さの取得にも使える。 詳しくはman pageを。
ちゃんと書いているつもりなのに、「unary operator expected」とか「test: too many arguments」 のようなエラーが出る。・条件式に変数を使っていて、その変数がNullだとこのようなことが起きる。 つまり、 while [ $hoge -ne 10 ] みたいな式で、$hogeがn…