この記事は何
shellgei160を通じて言語習得 Advent Calendar 2023に参加しています。
書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。
例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160
実行環境など
- Docker image: ruby:3.0.2
- 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に
answer-ruby
ディレクトリを作り、その中に解答となるファイルを作成していきます。
今回のテーマ
$ trap 'rm ~/tmp/*' EXIT
# 別解
$ echo 'rm ~/tmp/*' >> ~/.bash_logout
これは元のtrap
を使うのが鮮やかですね…。
解
シェル終了時の処理を定めるなら`~/.bash_logout'に処理を書き込むしかないですかね…?
File.open(File.expand_path('~/.bash_logout'), 'a') do |f|
f.puts('rm ~/tmp/*')
end
または、スクリプトの終了時の処理を定めるならこんな感じ…?
at_exit do
system('rm ~/tmp/*')
end
所感
- ホームディレクトリ(
~
)の展開を勝手にしてくれないのは意外 - システムコマンドの実行は
system
でできるんですね