bash」タグアーカイブ

run shebang @ Visual Studio Code

本サイトのアクセス状況がなんか変。
ログのユーザーエージェントを見ると WWWC が、コイツが原因か。
Windows のネタなんてとうの昔に全削除しているのに意味不明、何故?

よし、今月は macOS のネタしかやらないことにする。
来月は Fedora 30 が出るはずだし、ということで。

とりあえず今朝までに blog でやったクイックアクション等はまとめた。
macOS Tips – L’Isola di Niente

次は VSCode を Gedit 化するページを作っているんだけーが。
実はまだ shebang 実行を実現していなかったりする。
Gedit でスクリプトを debug – L’Isola di Niente

tasks.json は Python3 では “command”: “python3” にしているだけ。
Visual Studio Code 2018 | PaePoi

シバンを見つけて実行する手段が無いのなら自分で作ればいいジャン!
head コマンドからシバン部分を抜き出すスクリプトを書いてしまえ。

#!/bin/sh

line=`head -n 1 $1`
${line#*!} $1

たった 2 行。。。

これに run_shebang と拡張子の無い名前を付けて保存。
実行パーミッションを付けパスの通った所に置く、tasks.json の書き換え。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "run shebang",
            "type": "shell",
            "command": "run_shebang",
            "args": [
                "${file}"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        }
    ]
}

command に run_shebang を指定。
タスクの実行をやってみる。

よしイケる、もっと早くこの方法に気が付けばよかった。
拡張又はフリーソフトをインストールwwwww
って、たった 2 行のスクリプトすら自分で書けない人のやることだ。

command+D

Mac の Terminal.app で Python3 のインタラクティブシェル等を使う。
終了させようとして、つい command+D を押して画面分割になってしまう。
をやってしまうのは筆者だけなのだろうか?

そのまま control+D を押し直ししてウインドウを閉じていた。
実はどうやって画面分割を元に戻すのか知らない。
よし、たまにはヘルプを見てみよう。

shift+command+D
それだけかよ、もっと早く見ればよかった。。。。。
しかし画面分割なんてどんな時に使うんだろう?

Ctrl+U で行頭まで削除
Ctrl+K で行末まで削除

これ gnome-terminal でも使えるジャン。
bash 自体の機能なのかな、検索してみよう。

bashショートカットキー備忘録 – Qiita

更にいっぱいあるみたい。
けれど行頭移動は Home もしくは option+← で充分みたいな。
筆者的には control+U,K 以外はどうでもいい。
たまにはヘルプを見るといい発見があるものだ。

mojave 10.14.4 の通知が来たので適用。
JXA NSRect のバグは予想通りそのままでした。

Shell: Get Distribution Name

Linuxのバージョンの確認方法 – Qiita
Linux OSの種類とバージョンの調べ方 – Qiita

あれ? /etc/os-release ならばどのディストリビューションにもあるのか。
ということはドットコマンドで取り込んで。

#!/bin/sh

# ディストリビューション名
. /etc/os-release; echo $PRETTY_NAME
#cat /etc/system-release では Fedora 等一部

$NAME なら簡易。

これでどのディストリビューションでもイケるはず。
でもドットコマンドってどのシェルでも使えるかどうかは知らない。
ダメだったら source に書き換えしてちょ。
ちなみに macOS には /etc/os-release は無いです。

覚書ページの作り替え作業が終わらないので小ネタでした。

macOS Zip compress without ‘__MACOSX’

前回の続き。
よく考えたら zip コマンドなら __MACOSX は作られないんだよね。
だったらクイックアクションを作ってしまえばイイじゃん。

せっかくなのでプロンプトを出して圧縮名を決められるようにする。
デフォルトはディレクトリ名で、Fedora の file-roller と同じように。

Automator 起動、クイックアクションを新規作成。
[指定された Finder 項目を取得] を配置
[シェルスクリプトを実行] を配置

dpath=`dirname $1`
cd $dpath
dname=`basename $dpath`

res=`osascript -e "set result to display dialog \"Archive Name ?\" default answer \"$dname\"
text returned of result"`

for f in "$@"; do
	s=`basename $f`
	param+=" $s"
done

zip -r $res.zip $param

保存、日本語でもいいよ。

注意点はパラメーターはフルパスだということ。
$@ で zip に渡すと展開時にパスを再現してしまいます。
dirname, basename コマンドをフル活用しよう。

Finder で何か選択して実行、よし __MACOSX の無い zip のできあがり。
二本指タップから ZIP 圧縮するんだから同じだよね。
ただ、Automator のエディタはなんとかならんのか、編集し辛すぎ。

bash: ‘\n’ in read file (part2)

前回の抜き出しシェルスクリプトだけど。
echo -e で出力しようとしたのがいけなかったようだ。

while ループの中でガシガシとリダイレクトすればイケそう。
と思って Fedora で試すとバッチリ狙いどおりに出力された。

mac にソースを持って行くと、あれ?
なんかおかしいけど原因が解らない、仕事中も含め半日悩む。
下記の実験コードでやっと理解。

#!/bin/sh

while read -r line; do
    echo $line
    echo 0
done << __DOC__
aaa bbb
ccc\nddd
eee
__DOC__

Fedora

macOS

macOS の read は改行コードと文字列の \n を区別してくれない。
のではないな、echo で改行されてしまっているようだ。
echo “aa\nbb” だと普通に \n が出力されるのに、よくわからない。

後、前回は気が付かなかったけど macOS の echo には -e オプションが無い!
bash のバージョンが違うのは知っているけどまさかこんな所が違うとは。

同じ bash だから同じ挙動やオプションだと思ってはいけない教訓になった。
拡張の [[ とかは同様に使えるのにね。
てか、macOS って中身は本当に色々と古いんだよなぁ。