だいぶ前にGolangでパーミッションを指定してファイルを作成したいということがあったので、備忘として残しておく。
以下のように、permで指定してやればいい。

package main

import (
        "fmt"
        "io/ioutil"
        "os"
        "strconv"
)

func main() {
        content := []byte(
                `test line 1
test line 2
test line 3
test line 4
test line 5`)...

bashのシェルスクリプトで、ターミナルのウィンドウサイズやカーソルの現在位置を取得させたいということがあったので、備忘で残しておく。

1. ターミナルのサイズを取得する

ターミナルのサイズを取得するのは簡単で、bashでcheckwinsizeが有効になっていれば$LINES、$COLUMNS変数に値が入る。

#!/bin/bash
shopt -s checkwinsize; (:;:)

echo $LINES # 行数
echo $COLUMNS # 横の文字数

ちなみに、数字は1から数えての数になっている。

2. カーソルの現在位置を取得する

現在のターミナル...


ふとした思いつきで、シェルスクリプトでちょっとしたツールを作ろうかと思ったのだけど、標準入力をパイプから受け付けると同時にキーボードからの入力を受け付ける方法がわからなかったので調べてみた。 そもそも、パイプから受け付けている場合にキー入力を受け付けるには仮想端末が必要になるので、以下のように記述してreadする必要があるようだ。

read ... </dev/tty

動くサンプルだとこんな感じかな。


最近、zshやbashの設定を弄ってカスタムするのにちょっと凝ってるのだけど、そうやっていじってるとキーバインドでも特定のコマンドを実行させたりしたくなってくる。 bashやzshではrcファイルにbindの設定を書けばキーバインドに任意のコマンド実行を割り当てたりできるので、ちょっと忘れないように備忘で残しておく。

bashの場合

bashで、キーバインドから任意のコマンドを実行させる場合、単純に実行させるなら以下のように定義する。 なお、このときaliasは読み込まないので注意。

# 例) Ctrl + Xで「ls -la」を実行させる場合
bind -x ' "C-X": "...

先日、Twitterをぼけっと見てたときに見かけたツール『browsh』。 なんとなんと、ターミナル上でANSIを利用して、WEBページを普通に閲覧するというツール。裏でFirefoxを動作させて、それをANSIに変換しているようだ。 Youtubeもターミナル上で再生できる様子。

ホントかよ…と思いつつ、Dockerコンテナが用意されているようなので以下のコマンドでインストールと起動をしてみる。

docker run --rm -it browsh/browsh

マジか…! 一部、使っているコンソールによっては表示できない文字があったりするが、それでもこれは凄い…。

...


先日、ボケーとネットサーフィン中にTwitterで見かけたツール『up』が良さげだったのでちょっと試してみることにした。 このupコマンドでどういうことができるかというと、コンソール上でパイプで渡した出力に対してgrepやsed、awkといった処理をリトライし、確定したらそのままシェルスクリプトとして出力することができる。

以下のgifを見てもらったほうがイメージしやすいかもしれない。

こんな感じで、特定の出力に対してパイプ後の処理を試行錯誤で試す際に便利なコマンドだ。


先日開催された、第38回シェル芸勉強会に参加してきたので、その復習。 実は1個飛ばしてたのでちょっと久しぶりな感じ。今回は数学の問題が多いらしい。

問題及び模範解答はこちら。最初に、問題等に使用するファイルをgitからcloneしておくといい。

Q1.

今回の勉強会のタイトル、Unicodeの文字を利用してちょっと読みにくい状態にしてある。

echo 'jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会'

この文字( 後のきゃろさんのLT でわかったのだが、キリル文字で大きい数字を表す際にこの○で数字を囲むらしい。そんな使い方なんだ…。)を消して...


bashrcで直前のexit statusが正常終了・異常終了に応じてプロンプトの表示を切り替えさせる

個人的にはローカルではzshを使っているのだけど、ローカルのbashrcファイルをリモートでファイルを配置せずに利用する方法を知ってリモートサーバ用のbashrcを設定するようになった。 で、zshでやっているようにプロンプトに顔文字と直前のコマンドの成功・失敗に応じて切り替えを行わせるようにしたので、(わざわざ残しとくほどのものでもなさそうだけど)一応その内容を備忘として残しておく。

直前のコマンドの終了ステータスを取得する場合、PROMPT_COMMAND を使って取得させる必要がある。 なので、以下のような設定を.bashrcに書いてやるといいだろう。

# カラーコードを...

2年くらい前からちょこちょこ作ってたツールがある程度形になってきて、個人的に結構便利に使えるようになったので(ここんとこ忙しくて書くこともないし)紹介してみる。

lssh』という名称でGolangで書いたsshクライアントコマンドで、設定ファイルの内容をもとに接続先を選択できる様になっている。 コマンドなのでMacOS XやLinuxで動くのと、WindowsでもWSL(2018.03のアップデートが適用されてる必要あり)で動作を確認してる(ssh接続処理も全部Golangで書いてるので、多分Windows単体でも動くと思うけど未確認)。 実際に使ってる画面はこんな感じ(gifフ...