Home

execコマンドについて

stackoverflowとかで時々,exec 3>&1という記述を見かける.何してる? man bashのexecの項 exec [-cl] [-a name] [command [arguments]] If command is specified, it replaces the shell. No new process is created. The arguments become the arguments to command. If the -l option is supplied, the shell place...

Read more

shell commandの連続リダイレクト

$ echo foo 1>&2 1>file.txt と $ echo foo 1>file.txt 1>&2 は異なる結果になる. $ echo foo 1>&2 1>file.txt # 何も出力されない $ cat file.txt foo $ echo foo 1>file.txt 1>&2 foo $ cat file.txt # 何も出力されない これはなぜかというと,リダイレクトの解釈の順番は 左から右へ行われ, ファイルディスクリプタへのリダイレクトは現在のファイルディスクリプタの参照先へリダイレクトされる からである. echo foo 1>&...

Read more

timeコマンドの出力先はどこなのか?

timeコマンドの出力先が標準出力だったか標準エラー出力だったかを確認しようと思って,コマンドを叩いてみた. $ time echo foo 1>/dev/null real 0m0.000s user 0m0.000s sys 0m0.000s $ time echo foo 2>/dev/null foo real 0m0.000s user 0m0.000s sys 0m0.000s 標準出力も標準エラー出力も出力先ではない??じゃあ出力されているのはなんなんだ..man timeで確認してみる. ...When command finishes, time writes a message to standard error giving...

Read more

declare -rとreadonlyの関係について

bashのshellscriptを書くときに,変数を書き換え不可にして定義をしたいときがよくある. #!/bin/bash FILEPATH=$0 ... FILEPATH=another_value この場合,${FILEPATH}はこのスクリプトファイルへのパスなのだから後で別の値を代入できるようにしたくない.今までこのようなときはreadonlyのbuiltin commandを使って実現していたが,declare -rという定義の方法でも同じことができるらしい.何か違いがあるのかを調べてみた. 結論から言うと,変数のスコープに違いが生じる.declare -rはローカルスコープ, readonlyはグローバルスコープになる. #!/bin/bash functio...

Read more

bashで.inputrcの設定を読み込むには

仮想環境を構築した後,そこでしばらく作業する予定のときは.inputrcファイルに大文字小文字に依らず補完できる設定を書いて作業をするようにしている (set completion-ignore-case onを記述) のだけど,その設定を反映させるのにどうすればいいかやるたびに忘れるのでメモ. bind -f ~/.inputrc # もしくは,\C-x\C-r (re-read-init-file)でもOK. bindはReadline (bashのコマンドラインを制御するライブラリ) で有効になっているkeyやfunctionを表示したり設定したりするshell builtin command.-fオプションで次に続く引数のファイルから設定を読み込む. デフォルトでは\C...

Read more

treeコマンドで文字化けを防ぐ (+他のオプション)

treeコマンドを使ってると、日本語のファイル名が文字化けしてしまい困っていた。 $ ls file.txt ファイル.txt $ tree . . ├── file.txt └── �\203\225�\202��\202��\203�.txt 0 directories, 2 files tree -Nのオプションを使えば、マルチバイト文字もそのまま表示してくれるので文字化けは起きないようだ. -N: Print non-printable characters as is instead of as escaped octal numbers. $ tree -N . ├── file.txt └── ファイル.txt 0 director...

Read more

zshでタブ補完のときにエラーが出る

zshでタブ補完をしようとすると, (eval):setopt:3: no such option: NO_warnnestedvar のようにエラーが出る.補完自体はできるのだが,補完するたびに出力されるので困る. $ /bin/zsh --version zsh 5.2 (x86_64-apple-darwin16.0) $ /usr/local/bin/zsh --version zsh 5.4.1 (x86_64-apple-darwin16.7.0) /usr/local/bin/zshを起動させたところ,タブ補完でエラーメッセージは出なかった.tab-completionで認識してるzshとログインしているzshにバージョンに食い違いがある,ということだろうか?...

Read more

suで他のユーザーに切り替えができない

EC2インスタンスで作業を行っていたとき,他のユーザーでの操作を確認したい場面があったので $ sudo su user1 と入力したところ, This account is currently not available. と言われてユーザーの切り替えに失敗した.とりあえず出力されたメッセージでググってみる. “This account is currently not available” … Please helpがヒットした./etc/passwdの中身を変更して/sbin/nologinにしたせいでrootアカウントに入れなくなった?らしい.対象ユーザーがrootかどうかの違いはあるものの,自分と似た現象が起こっている./etc/passwdの中身を確認する. $...

Read more