1. ホーム
  2. ruby

[解決済み] シェルスクリプトにRubyを使用するには?

2022-04-23 20:36:32

質問

シェルスクリプトを使った簡単な作業を行いたいのですが

例えば ある正規表現にマッチするファイルのリストから、作業ディレクトリ内のファイルを選択する。

この種のことは標準のbashとgrepでできることは知っていますが、コマンドライン・プログラムとフラグなどのヒープを記憶することなく、Windowsとlinuxで動作するクイックスクリプトをハックできるのはいいことだと思います。

これを実行しようとしたのですが、結局、カレントディレクトリへの参照など、どこで情報を取得すればいいのかわからなくなってしまいました。

そこで質問ですが、rubyのシェルスクリプトを書くには、rubyライブラリのどの部分を知る必要があるのでしょうか?

どのように解決するのか?

デフォルトでは、すでに Dir ファイル それだけでかなり便利です。

Dir['*.rb'] #basic globs
Dir['**/*.rb'] #** == any depth of directory, including current dir.
#=> array of relative names

File.expand_path('~/file.txt') #=> "/User/mat/file.txt"
File.dirname('dir/file.txt') #=> 'dir'
File.basename('dir/file.txt') #=> 'file.txt'
File.join('a', 'bunch', 'of', 'strings') #=> 'a/bunch/of/strings'

__FILE__ #=> the name of the current file

また、stdlibから便利なのは ファイルユーティリティ

require 'fileutils' #I know, no underscore is not ruby-like
include FileUtils
# Gives you access (without prepending by 'FileUtils.') to
cd(dir, options)
cd(dir, options) {|dir| .... }
pwd()
mkdir(dir, options)
mkdir(list, options)
mkdir_p(dir, options)
mkdir_p(list, options)
rmdir(dir, options)
rmdir(list, options)
ln(old, new, options)
ln(list, destdir, options)
ln_s(old, new, options)
ln_s(list, destdir, options)
ln_sf(src, dest, options)
cp(src, dest, options)
cp(list, dir, options)
cp_r(src, dest, options)
cp_r(list, dir, options)
mv(src, dest, options)
mv(list, dir, options)
rm(list, options)
rm_r(list, options)
rm_rf(list, options)
install(src, dest, mode = <src's>, options)
chmod(mode, list, options)
chmod_R(mode, list, options)
chown(user, group, list, options)
chown_R(user, group, list, options)
touch(list, options)

これはかなりいい