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...
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>&...
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...
declare -rとreadonlyの関係について
bashのshellscriptを書くときに,変数を書き換え不可にして定義をしたいときがよくある.
#!/bin/bash
FILEPATH=$0
...
FILEPATH=another_value
この場合,${FILEPATH}はこのスクリプトファイルへのパスなのだから後で別の値を代入できるようにしたくない.今までこのようなときはreadonlyのbuiltin commandを使って実現していたが,declare -rという定義の方法でも同じことができるらしい.何か違いがあるのかを調べてみた.
結論から言うと,変数のスコープに違いが生じる.declare -rはローカルスコープ, readonlyはグローバルスコープになる.
#!/bin/bash
functio...
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...
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...
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にバージョンに食い違いがある,ということだろうか?...
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の中身を確認する.
$...
48 post articles, 6 pages.