ふとした思いつきで、アラビア数字から漢数字への変換をコンソール上でできないかなーと思ったのでやってみることにした。 以下のように、まず一度sedで全部漢数字に切り替えて、その後は各桁に応じて漢字の置き換えをしていくことで対応できるようだ。

echo 123456789 | sed 'y/0123456789/〇一二三四五六七八九/' | grep -o . | tac | paste - <(echo {十,百,千,万,十,百,千,億} | fmt -1 | cat <(echo) -) | grep -vE ^$'\t' | tac | sed -zr 's/(\t|\n)//g'| perl -lpe 's/一(?!($|万|億))//g;s/〇(?!$)//g'

時々、指定されたPATHに「/」が含まれている場合は自動的にディレクトリを作成してファイルを作成、コピーさせたいという事がある。 しかしtouchコマンドやcpでは自動でフォルダを作成することはできないので、通常であればその前にmkdirでディレクトリを作成しておく必要がある。

で、結構面倒だなと思って調べてみたところ、インストール時等にファイルを配置するために使われるinstallコマンドを利用することで、作成するファイルを配置するフォルダが無かったら自動で作成することができると知ったので、備忘で残しておく。

install -D /コピー元PATH /コピー先PATH
install -m 644 -D /コピー元PATH /コピー先PATH # -mでModeを指定できる

毎度お邪魔しているシェル芸勉強会に行ってきたので、その復習内容を残しておく。 今回は、ちょっと前にようやく買えた TexYoda II を持ってって挑戦してみた。

問題及び回答例はこちら。今回は大分難しい+ミスすると環境破壊系なので、破壊しても良い環境で実施しないと危ない内容なので注意。 また、事前に以下のコマンドで使用するファイル類を取得しておく。

...

行や配列をシャッフルしてくれるshufコマンドだが、最新ちょっと使う機会が増えてきたので使い方について調べてみることにした。 で、ある程度使い方が整理できてきたので、備忘で残しておくことにする。

1. 基本的な使い方

基本的な使い方としては、以下のようにパイプから入力を受け付けた要素(行)をシャッフル(ランダムに並べ替え)するという使い方になる。 (sort -Rと同じような処理)

command | shuf
[blacknon@BS-PUB-CENT7-01 ~]$ seq 1 10 | shuf
10
3
7
1
5
2
6
9
8
4

2.取得数を指定する

「...


telnetで接続してターミナル上にワールドマップを表示させる『MapSCII』

ボケーッとネットサーフィンしてたところ、telnetで接続するとターミナル上にASCIIで世界地図を表示する『MapSCII』なる代物を見つけたので、ちょっと試してみる。 以前から、telnetでスターウォーズ(エピソード4)を見れたりするサービスもあったけど、世界地図を表示してくれるってのは始めてだ。こちらの動画を見るとわかるけど、地図を拡大していって道路や道、どういったビルがあるかも見ることができるようだ。なんだこれは…。

以下のコマンドで接続、閲覧できるので、実際に触ってみよう。

telnet mapscii.me

接続直後の画面。 世界地図が表示されている状態。...


ふとしたことで、不特定多数のユーザにssh接続環境を用意してハンズオン環境を作る際、sshログインと同時にdockerのインスタンスにアクセスさせることができれば、各ログインセッションごとに同じ環境を個別に用意できるのではないかと思ったので、やってみることにした。 (といっても、やってることは単純でsshのauthrozied_keysのcommandに docker run -it image /bin/bash を書いといてやることで、指定したイメージから個別にコンテナを起動してログインさせているだけなのだけど…) メリットとしては、例えば

  • 複数名でログインしている場合に、1名が必...

声優の井上喜久子さんの17歳教(いくつになっても年齢は17歳基準で名乗る。17歳とXXX日みたいな感じで。)なるものがあるのだが、それを指定した誕生日から計算させるのをシェル芸でできそうだったのでやってみた。で、できたので一応備忘として残しておく。

実は今まで知らなかったのだが、dateコマンドでは以下のようにすることで、指定した日付+XX年後、みたいな指定ができるようだ(+XX年後とかは知ってたのだが、さらに日付を指定できるのは知らなかった)。

date -d 'YYYY/MM/DD 10 year ago'
blacknon@BS-PUB-UBUNTU-01:~$ date...

ふと、シェル芸で指定したキーワードの文字の間に草を生やしていく、その草を一文字ごとに増やしていくことはできないかと思ったのでやってみた。 当初はsedの\Bでやろうと思ったのだけど、思ったより草を増やしていくのが難しくて断念。致し方なく、一度一文字ごとに分割してpasteで結合する方法を使うことにした。

echo くそわろた|grep -o .|paste - <(seq -f'printf w"%%.s" {1..%g};echo' 100|bash)|grep -v '^\s'|sed -zr 's/(\t|\n)//g';echo
echo くそわろた|grep -o .|tac|paste - <(seq -f'printf w"%%.s" {1..%g};echo' 100|bash)|grep -v '^\s'|tac|sed -zr 's/(\t|\n)//g';echo #草が減っていくパターン

シェル芸botで遊んでる際に、columnコマンドで表を出力する際に右揃えの表を表示したくなったので、その備忘。 残念ながらcolumnコマンドではそのようなオプションは無いため、少々冗長になるけど一度revで左右を逆にして、columnでテーブルにした後再度revで元の状態に戻す方法で対応する。

command | rev | column -t | rev

個人的にクライアントのシェルはzshを使ってて、右側のプロンプト(RPROMPT)に時刻表示をさせるようにしている。 で、この時刻をプロンプトが表示された時刻ではなく、常にシステム時刻が表示されるようにしたいなと思い調べてみたところ、以下のような内容を.zshrcに記述することで実現出来た。

setopt prompt_subst
TMOUT=1
TRAPALRM() {zle reset-prompt}

RPROMPT="%F{white} %D{%Y-%m-%d %H:%M:%S} %f"


ちょっと前にシェル芸botで遊んでたところ、受け付けた標準入力をテンプレートファイルとして解釈して、変数展開を行ってくれるenvsubstなるコマンドについて知ったので、備忘として残しておくことにする。 gettextパッケージに入っているので、もしインストールされていない場合はyumやapt、brewからインストールするといいだろう。

使い方は簡単で、以下のようにパイプで変数のある内容を渡してやることでその内容を展開してくれる。

command | envsubst

tmuxの恩恵(セッションの保持とか)は受けたいけど、tmuxに慣れておらずうまく使えない。 個人ではなく、チームで使う場合とかだとなおさらそういった事があるので、踏み台サーバでssh接続時にセッションがあったら選択画面を、そうでない場合は新規セッションを開始するようなスクリプトを作ってみる。

鍵認証だと仮定して、以下のようなスクリプトをauthorized_keysのcommandで指定してやることで、接続時にセッションの有無を確認して再接続or新規セッション作成を選択させることができる。 (一応、こっちにも残してる)

#!/bin/bash

function usage {...

UbuntuやCentOSに入ってるwhiptailでTUIっぽいスクリプトを作成する(+注意点とか)

個人的に、数字を入力してリストから選択するとかがあまり好きではなく、コンソール上でもカーソルキーとかで選択したりしたいタイプなのだが、実はUbuntuやCentOSの場合ならインストール時にwhiptailというコマンドがバンドルされている。 これ、なんのコマンドなのかというとOSインストール時とかに表示される疑似GUIみたいなTUIを扱えるようにするコマンドで、まあ↓のようなやつ。多分一回は見たことあると思う。

で、このコマンドでは色々な種類のレイアウト(リストからの選択や入力など)をオプションで指定ができる。 ncursesとか使って別途プログラムを書くという方法もあるけど、そこま...