タグアーカイブ: bash

[覚書]bashでbg起動したプロセスを切り離す。ターミナルエミュレータからターミナルエミュレータをバックグランドで起動してjobsしたときに一覧にターミナルエミュレータを表示させたくないとか、誤ってプロセスを殺してターミナルエミュレータを落としたくないとか[disown内部コマンド登場の巻]

bgコマンドは使っていたけど、waitコマンドを知らなかったorz タコユーザーのdeginzabi163です。

まずはターミナルエミュレータから今のフォルダでもう一つターミナルエミュレータを起動する。バックグランド実行で。

こんな感じ。(サンプルはmlterm)

mlterm&[Enter]

しかし、バックグランドプロセスとしていつまでも残ってしまう。

まあ当たり前だが。というか用途からしてそれが正しい。(切り離すなんてのは例外も甚だしい)

とは、いえ、呼び出し元のターミナルを殺すと、道連れで死んでしまう恐れ。やはりなんとかしたい。

大体jobsで邪魔

jobs[Enter]
[1]- 実行中 mlterm&

そんなバッググランドプロセスの切り離しにはこれ「disown」

disown _プロセスID_

disownの実行例

jobs[Enter]
[1]- 実行中 mlterm&

とか出ているので

disown %1[Enter]

すると

jobs[Enter]
$ <– 何にもでていない様子

結論

ベリーナイス!期待通り。google先生より、基本に帰ってman bash。

[覚書]bashのコマンドプロンプトでカレントディレクトリを表示が長過ぎて不便。PROMPT_DIRTRIMで短く省略し快適に。

プロンプトに表示しているカレントディレクトリ表示だが、環境変数PROMPT_DIRTRIMで表示するディレクトリ数を制限可能。

例えばPROMPT_DIRTRIM=2で/etc/X11/Xsession.dにカレントにすると、”…/X11/Xsession.d”と表示される。ズバリ便利。

まあ3くらいにしておけばかなりいいんじゃないだろうか。

ただし4とかにすると機能しないんだがバグか?仕様か?manには書いてないが…(Version 4.3.30にて)

[覚書]シェルスクリプトでスペースや空白を含むファイル名を処理したいの対策

ファイル名に空白とか入っているとファイル名のリストが入った引数とかをforで回したときに空白でファイル名が分割されちゃって期待した動きにならないよね。

対策はフィールドセパレータ環境変数を設定するだけの事で具体的にはIFSに改行をセットすれば良い。

なお、IFS(IFS変数)とはInternal Field Separatorであり、安心の標準機能。

下記はカレントフォルダ以下の個々のファイルに対してmd5sumコマンドを実行し、全ての結果をhoge.txtに出力する例。
続きを読む