シェル
#シェル芸
概要
ユーザーとカーネルとの間のインタフェース
bashはシェルの実装の一つ
ホスト×ターミナル単位で最大1つのログインシェルを持つ
最初にsshログインした時、macでターミナルを開いた時のそれはログインシェルになる
端末は一つのフォアグラウンドジョブと複数のバックグラウンドジョブを持つことができる。
制御プロセスと制御端末の接続が切断されたら、カーネルは制御プロセスとフォアグラウンドプロセスジョブ内の全てのプロセスにシグナルSIGHUPを送信する。
bashが制御プロセスだった場合、bashはSIGHUPを受け取ると、exitする前に端末内の全ジョブにSIGHUPを送信する
nohupで無視できる
ログインシェルの役割
ノンログインシェルを起動する
環境変数をセットする(「PATH」や「TERM」や「UID」や「GID」)
デフォルト値の設定(USERNAME、HOSTNAMEなど)
ログインシェルの見分け方
シェルを開いた直後にecho $0
-bash,-suなど-がついている→ログインシェル
bash,suなど-がついていない→ノンログインシェル
https://gyazo.com/f1de9d94a64382d6c3843d0e05eb735e
exec
execはbashの組み込みコマンド
シェルのプロセスを使って指定したコマンドを実行する
新しいプロセスができない
そのまま終了する
プロセス数に制限がある時とか
シェルスクリプトでラッパーコマンドを作成する時に
現在のシェルのリダイレクションを変更できる
code:bash
$ exec > output
$ pwd
$ exec > /dev/tty # シェルの標準出力先を画面に戻す
$ pwd
/home/blueskyarea
cat output
シェル上での作業で出力先のコンテキストを設定しちゃいたい時とか