Unix/Linux

UNIX/Linuxでアプリケーション毎のシェルの設定ファイルを置いておくディレクトリ

  • POST
RedHat系のLinuxには/etc/profile.d/というディレクトリがあり、そこにアプリケーションごとのシェルの設定ファイルが置かれているらしい。 実際、CentOS 6.2を見てみると % ls /etc/prorile.d colors.csh glib2.csh less.csh vim.csh colorls.sh glib2.sh less.sh vim.sh cvs.csh lang.csh qt.csh which2.sh cvs.sh lang.sh qt.sh となっている。 これがbashだと/etc/profile中の以下のコードによって読み込まれる for i in /etc/profile.d/*.sh ; do if [ -r "$i" ]; then if [ "${-#*i}" != "$-" ]; then . $i else . "$i" >/dev/null 2>&1 fi fi done 2行目の-rはファイルが読み取り可能なときに真を返すオプション。 3行目の$-は「set コマンドで設定されたフラグ、もしくはシェルの起動時に指定されたフラグの一覧が設定される変数」(変数を使用する – UNIX & Linux コマンド・シェルスクリプト リファレンス)。${-#*i}はパターンマッチと呼ばれるもので、$iの値で/^*?i/にマッチする部分を取り除く。 ここでやっていることはbashのオプションに-iが含まれているかどうかを確かめていて、含まれている場合は上が実行され、ない場合は下が実行される。-iオプションはbashがインタラクティブなときにつくオプションなので、シェルスクリプトで実行された場合は出力が/dev/nullに送られるという感じだろう。 なので、個人用のアプリケーションごとに設定は~/.profile.dというディレクトリを作って、そこに*.shというファイルを置き、.bash_profileにこんな感じ感じで書けばいいと思った。 if [ -d ~/.profile.d ]; then for i in ~/.

Cygwinのlnをmklinkに変換するスクリプト

  • POST
Cyqwinのlnで作ったシンボリックリンクをWindowsのプログラムから開くとバイナリファイルになっていて、リンク先を開いてくれない。 しかし、Windows Vista以降で使えるmklinkを使ってシンボリックリンクを作ると、Windowsでも、Cygwinでもシンボリックリンクとして働いていれる(windows とCygwinで始めに知るべきSymlinkの扱い – ブックマクロ開発に参照)。 そこで、lnと打ったら、mklinkでシンボリックリンク・ハードリンクを作ってくれるスクリプトを作った。 ※ちなみにハードリンクの場合はlnで作ってもWindows側でハードリンクとして働いてくれる。 しかし、gitで管理しているファイルに対して貼ったハードリンクはgit pullすると、外れてしまう。 なのでmklinkで作ったシンボリックリンクを使うのが一番良い。 ソースコード tmsanrinsha/ln2mklink インストール $ mkdir -p ~/bin $ curl -L https://raw.github.com/tmsanrinsha/ln2mklink/master/ln > ~/bin/ln $ chmod a+x ~/bin/ln $ export PATH="$HOME/bin:$PATH" .(z|ba)shrcに if [[ `uname` = CYGWIN* ]]; then export PATH="$HOME/bin/cygwin:$PATH" fi を追記して、 $ source .(z|ba)shrc 使い方 普通にlnを使う感じに使う。ただしオプションは-sと-fのみ使える。 シンボリックリンクを貼りたい時はCygwin terminalを「管理者として実行」する必要がある。 引数一つだとカレントディレクトリに同名リンクファイルを作る [~/hoge\_dir/fuga\_dir]% ln ~/hoge_dir/foo foo <<===>> C:\Users\tmiwa\hoge_dir\foo のハードリンクが作成されました 左側がリンクで、右が元々のファイル。このコメントはSJISなので文字エンコードをUTF-8にしていると文字化けする カレントディレクトリに名前を変更してシンボリックリンクを作る [~/hoge\_dir/fuga\_dir]% ln -s ~/hoge_dir/foo foo2 foo2 <<===>> C:\Users\tmiwa\hoge_dir\foo のシンボリック リンクが作成されました ~/piyo_dir ディレクトリにシンボリックリンクを作る

シェル

  • POST
ログインシェル /etc/passwdで確認できる。 一度に複数のユーザーの設定を変えるにはsudo vipwと打つか、直接sudo vi /etc/passedで編集する。 chshコマンドを使うと特定のユーザーのログインシェルを変更できる。 参照 ログイン・シェル とは – Linuxキーワード:ITpro MacのログインシェルをHomebrew等で入れたzshやbashに変更する方法 | Macとかの雑記帳 dotfiles GitHubで管理すると良い tmsanrinsha/dotfiles GitHub does dotfiles – dotfiles.github.com sudoやsuでrootになると/root以下のdotfilesを参照する。 sudo -Eをすると環境変数を引き継ぐので\$HOMEが変わらず、自分のホームディレクトリのdotfilesを参照できる。 sudoのバージョンが低いとEオプションがない。個人で使ってる場合は/root以下のようにシンボリックリンクを貼るとかする。 sudo ln -s $HOME/.* /root 設定ファイルの読み込み 【redhat linux】bash 設定ファイル読み込み順番 キーバインド bashはreadlineという入力ライブラリを使っているが、zshは独自のものを使っている(参照)。 zshについてはこちら。 readlineについてはこちら。 環境変数 UNIX シェル 第08回「ロケールを正しく設定する」 環境変数LC_ALLがセットされている場合は、LC_CTYPEやLC_MESSAGESの元の設定は無効となる。環境変数LC_ALLがセットされていない場合は、LC_CTYPE や LC_MESSAGESのデフォルトの値は環境変数LANGの値となる bash を自分好みに設定する / 魔宮の伝説 – いますぐ実践! Linuxシステム管理 / Vol.119 -環境変数(PS1-PS4, PROMPT_COMMAND, IGNOREEOF, FIGNORE) 設定されている環境変数の表示は(print)env。