綾小路龍之介の素人思考

[linux] "sh -c"を使ってみる。

$ sh -c hoge と $ hoge とで何が違うのだろうかということ。

まずはシンプルな例。psコマンドを呼び出したシェルのプロセスIDは28676ということが判る。

$ ps wxf -U hoge; echo $$;
  PID TTY      STAT   TIME COMMAND
28676 pts/6    Ss     0:00  \_ /bin/bash
28831 pts/6    R+     0:00      \_ ps wxf -U hoge
28676

sh -c を使用した例。ps コマンドを呼び出したシェルのプロセスIDは28832で、このプロセスはプロセスID28676から呼び出されたということが判る。

$ sh -c 'ps wxf -U hoge; echo $$;'
  PID TTY      STAT   TIME COMMAND
28676 pts/6    Ss     0:00  \_ /bin/bash
28832 pts/6    S+     0:00      \_ sh -c ps wxf -U hoge; echo $$;
28833 pts/6    R+     0:00          \_ ps wxf -U hoge
28832

つまり、sh -cを使うとプロセスが1つ作られてこのプロセスの中で引数に与えられたコマンドが走る。便利だと思われる良い例が見つからない。例えばcronではsh -cのテクニックが使われている。

 1109 ?        Ss     0:05 /usr/sbin/cron
 7722 ?        S      0:00  \_ /USR/SBIN/CRON
 7723 ?        Ss     0:00      \_ /bin/sh -c bash ~/****************.sh 2>&1
 7724 ?        R      0:16          \_ bash /home/****/****************.sh

リファレンス

  1. "sh -c" - Google 検索
  2. NSTaskで外部コマンドを実行するときには"/bin/sh -c"を経由させると幸せらしい - Watsonのメモ
  3. IT Resource Center forums - difference between "sh -c" & "/usr/bin/sh"
  4. sh -cとかどういうときに使うのでしょうか? - Yahoo!知恵袋
  5. 関数system
  6. sudo でリダイレクトするには、sudo sh -c '..."を使う、というけれど、ほんとに面倒

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-12-12T08:34:42+09:00
  2. Modified: 2009-12-12T08:34:42+09:00
  3. Generated: 2017-01-04T23:09:16+09:00