Cで書かれたプログラムを手軽にコンパイル&実行するシェルスクリプト

 C を気軽に書いて実行して結果を見るということをしたかったので作った。

主な機能は以下の通りである。

サンプルコード

Cのプログラムを手軽にコンパイル&実行するシェルスクリプト

使用イメージ

以下のようなファイルがあったとする。

$ cat hello.c
#include<stdio.h>

int main(void) {
    puts("こんにちは!");
}

これをコンパイル&実行するには、以下のコマンドを打てばいい。

$ compile_c.sh hello.c
gcc hello.c -o /home/test/bin/hello
/home/test/bin/hello
こんにちは!
exit status: 0

参考

C をスクリプト言語感覚で使えるようにする試みはたくさんあって、以下に詳しかった。

qiita.com

 

 

端末エミュレータ上で一言メモをとるシェルスクリプト

簡単なメモをとりたいときに、いちいち

  • エディタを起動する
  • ファイルを編集する
  • 保存する

という一連の操作を行うのが面倒なので作った。

端末エミュレータ上で一言メモをとるためのシェルスクリプト

できること

メモをとる

基本的には、メモしたいことを引数として起動すればメモが記録される。

引数なしで起動した場合、ログファイルの最終行を表示する。

$ hitokoto.sh つらい
$ hitokoto.sh
[2016-11-05 19:45:24] つらい

検索

特定のワードで検索する

$ hitokoto -s つらい
1:[2016-11-05 19:45:24] つらい
3:[2016-11-05 19:49:01] つらい
4:[2016-11-05 19:49:05] つらい
5:[2016-11-05 19:49:44] とてもつらい

履歴

ログファイルの末尾から指定した行数分メモの履歴を表示する。

$ hitokoto -h 2
[2016-11-05 19:49:05] つらい
[2016-11-05 19:49:44] とてもつらい

複数のファイルを一括で連番付きリネームするバッチファイル

バッチファイルの練習として作った。

複数ファイルを一括で連番付きファイル名にリネームするバッチファイル

使い方

(1) リネームしたい複数のファイルを選択して、バッチファイルにドラッグ&ドロップする。

f:id:hk03ne:20161016162247j:plain

(2) ファイル名の先頭に付加する文字列を聞かれるので、好きな文字列を指定する。

f:id:hk03ne:20161016162709j:plain

(3) リネームされる。

f:id:hk03ne:20161016162727j:plain

f:id:hk03ne:20161016162048j:plain

説明

31~32行目

set INDEX=00000000000000%INT_INDEX%
set INDEX=!INDEX:~-%PAD_LENGTH%!

0でパディングされた連番を生成している。環境変数の遅延展開を利用している。

35~36行目

set FILENAME="%~nx1"
set EXTENSION=%~x1

絶対パスからファイル名と拡張子の部分を取り出している。

注意

ファイル名に「&」があるファイルは正常にリネームできないので注意してください。

参考

Cで文字列入力用の関数を作成する

C言語で標準入力に入力された文字列を読み込むとき、scanf で読み込むとバッファオーバーランになる危険性がある。フォーマット指定をしっかりやればバッファオーバーランは防げるらしい*1 が、正直なところ面倒くさい。

fgets で何とかしつつ、かつ標準入力にゴミを残さないようにするのがいいと思う。

fgets は改行を含めて読み込むので、読み込まれた文字列の中に改行文字が見つかれば、最後まで読み込めていることになる。

改行文字が見つからなかった場合は、読み取られなかった分が標準入力に残っているので、空読みしてエラーを返すようにする。

以下、サンプルコードと動作例を示す。

サンプルコード

Cで標準入力から文字列を読み取る関数とその使用例のサンプルコード

動作例

f:id:hk03ne:20160813000345j:plain

他にもやり方はあるかもしれないが、当面はこれで問題はない。

参考

無印良品 USBデスクファンの分解と掃除

暑くなってきたので、無印良品のUSBデスクファンを引っ張り出してきた。残念なことにほこりがついていたので、分解して掃除した。

この製品はファンの後ろ側の部分が簡単に外れるようになっているけど、一見しただけでは外し方がわかりにくいようになっている。

ファンの後ろ側の部分をつかんで、(ファンの後ろ側を手前として)反時計周りに回すと、分離できる。

f:id:hk03ne:20160418195743j:plain

また、後ろ側の羽は引っ張るだけで簡単にとれる。

f:id:hk03ne:20160418195804j:plain

さらに、ドライバを使えば前側の部分も外れるみたいだが、ドライバがないのでできなかった。

すこしやりづらかったが、ウェットティッシュで拭いて掃除は終わり。

f:id:hk03ne:20160418200322j:plain

これで気持ちよく使えるようになった。