Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > shellライブラリ > Shellクラス

class Shell

クラスの継承リスト: Shell < Object < Kernel < BasicObject

Abstract

Shellオブジェクトはカレントディレクトリを持ち, コマンド実行はそこからの相対パスになります.

特異メソッド

alias_command(alias, command, *opts) {...} -> self

コマンドの別名(エイリアス)を作成します。 コマンドが無い場合は、Shell.def_system_command などであらかじめ作成します.

[PARAM] alias:
エイリアスの名前を文字列で指定します.
[PARAM] command:
コマンド名を文字列で指定します.
[PARAM] ?:
*opts command で指定したコマンドのオプションを指定します.

使用例: ls -la | sort -k 5 のような例。

Shell.def_system_command("ls")
Shell.alias_command("lsla", "ls", "-a", "-l")
Shell.def_system_command("sort")
sh = Shell.new
sh.transact {
  (lsla | sort("-k 5")).each {|l|
    puts l
  }
}
cd(path = nil, verbose = self.verbose) -> self

pathをカレントディレクトリとするShellオブジェクトを生成します.

[PARAM] path:
カレントディレクトリとするディレクトリを文字列で指定します。
[PARAM] verbose:
true を指定すると冗長な出力を行います。

使用例

require 'shell'
sh = Shell.new
sh.cd("/tmp")
debug -> bool | Integer
debug? -> bool | Integer
debug=(val)

デバッグ用のフラグの設定および、参照を行います。

[PARAM] val:
bool 値や整数値を指定します。詳細は下記を参照してください。
# debug: true -> normal debug
# debug: 1    -> eval definition debug
# debug: 2    -> detail inspect debug
def_system_command(command, path = command) -> nil

Shellのメソッドとしてcommandを登録します.

OS上のコマンドを実行するにはまず, Shellのメソッドとして定義します. 注) コマンドを定義しなくとも直接実行できるShell#systemコマンドもあります.

[PARAM] command:
Shell のメソッドとして定義するコマンドを文字列で指定します。
[PARAM] path:
command のパスを指定します。 指定しない場合はcommand と同じになります。

例)

Shell.def_system_command "ls"
# ls を定義

Shell.def_system_command "sys_sort", "sort"
# sortコマンドをsys_sortとして定義

sh = Shell.new
sh.transact {
  ls.each { |l|
    puts l
  }
  (ls("-l") | sys_sort("-k 5")).each {|l|
    puts l
  }
}
default_record_separator -> String
default_record_separator=(rs)

執筆者募集

Shell で用いられる入力レコードセパレータを表す文字列を設定および参照します。 なにも指定しない場合は$/ の値が用いられます。

[PARAM] rs:
Shell で用いられる入力レコードセパレータを表す文字列を指定します。
default_system_path -> Array
default_system_path=(path)

Shellでもちいられるコマンドを検索する対象のパスを設定および、参照します。

[PARAM] path:
Shellでもちいられるコマンドを検索する対象のパスを文字列で指定します。

動作例

require 'shell'
p Shell.default_system_path
# 例
#=> [ "/opt/local/bin", "/opt/local/sbin", "/usr/bin", "/bin", "/usr/sbin", "/sbin", "/usr/local/bin", "/usr/X11/bin", "/Users/kouya/bin"]
Shell.default_system_path = ENV["HOME"] + "/bin"
p Shell.default_system_path
# => "/Users/kouya/bin"
install_system_commands(pre = "sys_") -> ()

system_path上にある全ての実行可能ファイルをShellに定義する. メソッ ド名は元のファイル名の頭にpreをつけたものとなる.

[PARAM] pre:
Shellに定義するメソッド名の先頭に付加される文字列を指定します。

使用例: ls -l | head -n 5 のような例。

Shell.install_system_commands
sh = Shell.new
sh.verbose = false
sh.transact {
  (sys_ls("-l") | sys_head("-n 5")).each {|l|
    puts l
  }
}
new(pwd = Dir.pwd, umask = nil) -> Shell

プロセスのカレントディレクトリをpwd で指定されたディレクトリとするShellオ ブジェクトを生成します.

[PARAM] pwd:
プロセスのカレントディレクトリをpwd で指定されたディレクトリとします。 指定しない場合は、Dir.pwd が使用されます。
[PARAM] umask:
ファイル作成の際に用いられる umask を使用します。
unalias_command(alias) -> ()

commandのaliasを削除します.

[PARAM] alias:
削除したいエイリアスの名前を文字列で指定します。
[EXCEPTION] NameError:
alias で指定したコマンドが無い場合に発生します。

使用例: ls -la | sort -k 5 のような例。

Shell.def_system_command("ls")
Shell.alias_command("lsla", "ls", "-a", "-l")
Shell.def_system_command("sort")
sh = Shell.new
sh.transact {
  (lsla | sort("-k 5")).each {|l|
    puts l
  }
}
Shell.unalias_command("lsla")
begin
  Shell.unalias_command("lsla")
rescue NameError => err
  puts err
end
undef_system_command(command) -> Shell::CommandProcessor

commandを削除します.

[PARAM] command:
削除するコマンドの文字列を指定します。

動作例:

Shell.def_system_command("ls")
# ls を定義
Shell.undef_system_command("ls")
# ls を 削除

sh = Shell.new
begin
  sh.transact {
    ls("-l").each {|l|
      puts l
    }
  }
rescue NameError => err
  puts err
end
verbose -> bool
verbose? -> bool
verbose=(flag)

true ならば冗長な出力の設定を行います。

[PARAM] flag:
true ならば冗長な出力の設定を行います。

インスタンスメソッド

test(command, file1, file2 = nil) -> bool
self[command, file1, file2 = nil] -> bool

執筆者募集。 ファイルテスト関数testと同じです。

[PARAM] command:
ファイルテスト関数testと同じです。
[PARAM] file1:
文字列でファイルへのパスを指定します。 ファイルテスト関数testに渡される第一引数となります。
[PARAM] file2:
文字列でファイルへのパスを指定します。 ファイルテスト関数testに渡される第二引数となります。省略可。

例:

require 'shell'
Shell.verbose = false
sh = Shell.new
begin
  sh.mkdir("foo")
rescue
end
p sh[?e, "foo"]         #=> true
p sh[:e, "foo"]         #=> true
p sh["e", "foo"]        #=> true
p sh[:exists?, "foo"]   #=> true
p sh["exists?", "foo"]  #=> true
atime(filename) -> Time

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] File.atime

basename(filename, suffix = "") -> String

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列を指定します。
[PARAM] suffix:
サフィックスを文字列で与えます。'.*' という文字列を与えた場合、'*' はワイルドカードとして働

'.' を含まない任意の文字列にマッチします。

[SEE_ALSO] File.basename

blockdev?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] FileTest.#blockdev?

cat(*files) -> Shell::Filter

実行すると, それらを内容とする Filter オブジェクトを返します.

[PARAM] ?:
*files シェルコマンド cat に与えるファイル名を文字列で指定します。

動作例

require 'shell'
Shell.def_system_command("head")
sh = Shell.new
sh.transact {
  glob("*.txt").to_a.each { |file|
    file.chomp!
    cat(file).each { |l|
      echo(l) | tee(file + ".tee") >> "all.tee"
    }
  }
}
cd(path, &block) -> self
chdir(path, &block) -> self

カレントディレクトリをpathにする. イテレータとして呼ばれたときには ブロック実行中のみカレントディレクトリを変更する.

[PARAM] path:
カレントディレクトリを文字列で指定します.
[PARAM] block:
path で指定したディレクトリで行う操作をブロックで指定します.

使用例

require 'shell'
sh = Shell.new
sh.transact {
  cd("/tmp"){
    p cwd #=> "/tmp"
  }
  p cwd #=> "/Users/kouya/rbmanual"
}
chardev?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] FileTest.#chardev?

chmod(mode, *filename) -> Integer

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列を指定します。
[PARAM] mode:
chmod(2) と同様に整数で指定します。

[SEE_ALSO] File.chmod

chown(owner, group, *filename) -> Integer

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] owner:
chown(2) と同様に数値で指定します。nil または -1 を指定することで、オーナーを現在の>ままにすることができます。
[PARAM] group:
chown(2) と同様に数値で指定します。nil または -1 を指定することで、グループを現在の>ままにすることができます。
[PARAM] filename:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.chown

ctime(filename) -> Time

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] File.ctime

cwd -> String
dir -> String
getwd -> String
pwd -> String

カレントディレクトリのパスを文字列で返します。

使用例

require 'shell'
sh = Shell.new
p sh.cwd
# 例
#=> "/Users/kouya/tall"
delete(*filename) -> Integer

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.delete

directory?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] FileTest.#directory?

dirname(filename) -> String

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列を指定します。

[SEE_ALSO] [[File.dirname]]

echo(*strings) -> Shell::Filter

実行すると, それらを内容とする Filter オブジェクトを返します.

[PARAM] ?:
*strings シェルコマンド echo に与える引数を文字列で指定します。

動作例

require 'shell'
Shell.def_system_command("head")
sh = Shell.new
sh.transact {
  glob("*.txt").to_a.each { |file|
    file.chomp!
    cat(file).each { |l|
      echo(l) | tee(file + ".tee") >> "all.tee"
    }
  }
}
executable?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#executable?

executable_real?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#executable_real?

exist?(file) -> bool
exists?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] FileTest.#exist? FileTest.#exists?

expand_path(path)

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] path:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.expand_path

file?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] FileTest.#file?

foreach(path = nil, &block) -> ()

pathがファイルなら, File#foreach pathがディレクトリなら, Dir#foreach の動作をします。

[PARAM] path:
ファイルもしくはディレクトリのパスを文字列で指定します。

使用例

require 'shell'
Shell.verbose = false
sh = Shell.new
sh.foreach("/tmp"){|f|
  puts f
}
ftype(filename) -> String

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.ftype

glob(patten) -> Shell::Filter

実行すると, それらを内容とする Filter オブジェクトを返します.

[PARAM] patten:
シェルコマンド glob に与えるパターンを指定します。 パターンの書式については、Dir.[]を参照してください。

動作例

require 'shell'
Shell.def_system_command("head")
sh = Shell.new
sh.transact {
  glob("*.txt").to_a.each { |file|
    file.chomp!
    cat(file).each { |l|
      echo(l) | tee(file + ".tee") >> "all.tee"
    }
  }
}

[SEE_ALSO] Dir.[]

grpowned?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] FileTest.#grpowned?

jobs -> Array

執筆者募集. スケジューリングされているjobの一覧を返す.

join(*item) -> String

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] item:
連結したいディレクトリ名やファイル名を文字列で与えます。

[SEE_ALSO] File.join

kill(sig, job)

執筆者募集. jobにシグナルsigを送る.

link(old, new) -> 0

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] old:
ファイル名を表す文字列を指定します。
[PARAM] new:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.link

lstat(filename) -> File::Stat

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.lstat

mkdir(*path) -> Array

Dir.mkdirと同じです。 (複数可)

[PARAM] ?:
*path 作成するディレクトリ名を文字列で指定します。
[RETURN]
作成するディレクトリの一覧の配列を返します。

使用例

require 'shell'
Shell.verbose = false
sh = Shell.new
begin
  p sh.mkdir("foo") #=> ["foo"]
rescue => err
  puts err
end
mtime(filename) -> Time

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] File.mtime

open(path, mode) -> object

pathがファイルなら, File#open pathがディレクトリなら, Dir#open の動作をします。

[PARAM] path:
くわしくは、File.open, Dir.openを参照してください。
[PARAM] mode:
くわしくは、File.open, Dir.openを参照してください。
out(dev = STDOUT, &block) -> ()

Shell#transact を呼び出しその結果を dev に出力します。

[PARAM] dev:
出力先をIO オブジェクトなどで指定します。
[PARAM] block:
transact 内部で実行するシェルを指定します。

使用例:

require 'shell'
Shell.def_system_command("head")
sh = Shell.new
File.open("out.txt", "w"){ |fp|
  sh.out(fp) {
    system("ls", "-l") | head("-n 3")
  }
}
owned?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] FileTest.#owned?

pipe?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列か IO オブジェクトを指定します。

[SEE_ALSO] FileTest.#pipe?

popd -> ()
popdir -> ()

ディレクトリスタックからポップし, それをカレントディレクトリにする.

動作例

require 'shell'
Shell.verbose = false
sh = Shell.new
sh.pushd("/tmp")
p sh.cwd #=> "/tmp"
sh.pushd("/usr")
p sh.cwd #=> "/usr"
sh.popd
p sh.cwd #=> "/tmp"
pushd(path = nil, &block) -> object
pushdir(path = nil, &block) -> object

カレントディレクトリをディレクトリスタックにつみ, カレントディレク トリをpathにする. pathが省略されたときには, カレントディレクトリと ディレクトリスタックのトップを交換する. イテレータとして呼ばれたと きには, ブロック実行中のみpushdする.

[PARAM] path:
カレントディレクトリをpathにする。文字列で指定します。
[PARAM] block:
イテレータとして呼ぶ場合, ブロックを指定します。

動作例

require 'shell'
Shell.verbose = false
sh = Shell.new
sh.pushd("/tmp")
p sh.cwd #=> "/tmp"
sh.pushd("/usr")
p sh.cwd #=> "/usr"
sh.popd
p sh.cwd #=> "/tmp"
sh.pushd("/usr/local"){
  p sh.cwd #=> "/usr/local"
}
p sh.cwd #=> "/tmp"
readable?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#readable?

readable_real?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#readable_real?

readlink(path) -> String

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] path:
シンボリックリンクを表す文字列を指定します。

[SEE_ALSO] File.readlink

rehash -> Hash

執筆者募集。 リハッシュする。通常使う事はありません。

rename(from, to) -> 0

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] from:
ファイルの名前を文字列で与えます。
[PARAM] to:
新しいファイル名を文字列で与えます。

[SEE_ALSO] File.rename

rmdir(*path) -> ()

Dir.rmdirと同じです。 (複数可)

[PARAM] ?:
*path 削除するディレクトリ名を文字列で指定します。
setgid?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#setgid?

setuid?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#setuid?

size(file) -> Integer
size?(file) -> Integer | nil

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#size FileTest.#size?

socket?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#socket?

split(pathname) -> [String]

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] pathname:
パス名を表す文字列を指定します。

[SEE_ALSO] File.split

stat(filename) -> File::Stat

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.stat

sticky?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#sticky?

symlink(old, new) -> 0

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] old:
ファイル名を表す文字列を指定します。
[PARAM] new:
シンボリックリンクを表す文字列を指定します。

[SEE_ALSO] File.symlink

symlink?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#symlink?

system(command, *opts) -> Shell::Filter

commandを実行する.

[PARAM] command:
実行するコマンドのパスを文字列で指定します。
[PARAM] ?:
*opt command のオプションを文字列で指定します。複数可。

使用例:

require 'shell'
Shell.verbose = false
sh = Shell.new

print sh.system("ls", "-l")
Shell.def_system_command("head")
sh.system("ls", "-l") | sh.head("-n 3") > STDOUT
system_path -> Array
system_path=(path)

コマンドサーチパスの配列を返す。

[PARAM] path:
コマンドサーチパスの配列を指定します。

使用例

require 'shell'
sh = Shell.new
sh.system_path = [ "./" ]
p sh.system_path #=> ["./"]
tee(file) -> Shell::Filter

実行すると, それらを内容とする Filter オブジェクトを返します.

[PARAM] file:
シェルコマンドtee に与えるファイル名を文字列で指定します。

動作例

require 'shell'
Shell.def_system_command("head")
sh = Shell.new
sh.transact {
  glob("*.txt").to_a.each { |file|
    file.chomp!
    cat(file).each { |l|
      echo(l) | tee(file + ".tee") >> "all.tee"
    }
  }
}
transact { ... } -> object

ブロック中で shell を self として実行します。

例:

require 'shell'
Shell.def_system_command("head")
sh = Shell.new
sh.transact{
  system("ls", "-l") | head > STDOUT
  # transact の中では、
  # sh.system("ls", "-l") | sh.head > STDOUT と同じとなる。
}
truncate(path, length) -> 0

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] path:
パスを表す文字列を指定します。
[PARAM] length:
変更したいサイズを整数で与えます。

[SEE_ALSO] File.truncate

umask -> object

umaskを返します。

unlink(path) -> self

pathがファイルなら, File#unlink pathがディレクトリなら, Dir#unlink の動作をします。

[PARAM] path:
くわしくは、File.unlink, Dir.unlinkを参照してください。
utime(atime, mtime, *filename) -> Integer

Fileクラスにある同名のクラスメソッドと同じです.

[PARAM] filename:
ファイル名を表す文字列を指定します。
[PARAM] atime:
最終アクセス時刻を Time か、起算時からの経過秒数を数値で指定します。
[PARAM] utime:
更新時刻を Time か、起算時からの経過秒数を数値で指定します。

[SEE_ALSO] File.utime

writable?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#writable?

writable_real?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#writable_real?

zero?(file) -> bool

FileTestクラスにある同名のクラスメソッドと同じです.

[PARAM] file:
ファイル名を表す文字列を指定します。

[SEE_ALSO] FileTest.#zero?

Methods

Classes