それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bash

xargs でシェルのalias を使えるようにする方法。

xargs で alias が使えない takuya@:教科書$ find -type d -maxdepth 1 | xargs ll xargs: ll: そのようなファイルやディレクトリはありません 悲しい。Aliasはあくまで bashのエイリアスであり、シェル経由せずにfork するような場合には全く役に立たない。…

sudo su実行後も環境変数を維持する

suの実行後にカレントディレクトリを維持したい su を実行するとカレントディレクトリが変わってしまうので、いまいるディレクトリやeditor 変数をそのままに 別ユーザーになりたい。 sudo -E を使う sudo にオプションを付ければ、カレントディレクトリなど…

xargsで複数行のコマンドを実行する方法

xargs で複数行のコマンドを実行したい。 出来ない・・・ ls *.txt | xargs -I@ echo @ ; sleep 1 forループならできるんだけど、for ループだとどうしても不便。 xargs でシェルコマンドを作って渡す. xargs だと限界があるので、もうシェルの文字列にして…

画像をpdfに変換する

画像を、PDF(画像埋込)に変換する img2pdf を使ってみる img2pdf のインストール img2pdfは pip で提供されている pythonのコマンドなので pip でインストールする。 pip install img2pdf これで準備出来た。 使ってみる。 ls *.jpg | xargs -I@ img2pdf @…

xargs で実行前に確認のY/Nを実行する interactive

xargs のコマンド実行前に確認する xargs -p これで、毎回確認できる 使ってみた例 takuya@temp$ ls *.jpg | xargs -p -I@ --verbose mogrify -crop 2886x3700+0+0 @ mogrify -crop 2886x3700+0+0 out-000.jpg ?...y mogrify -crop 2886x3700+0+0 out-000.jp…

xargs 実行するコマンドを表示してどこまで進んだかを見やすくする

xargs 便利ですよね。 コマンドを明示的に1つずつ実行したり、ファイルをまとめて実行したり。実行する子プロセス数(スレッド)を指定できたり。 まとめて処理しているときにどこまで処理しているかを見ながらやってほしい たとえば、rsync の場合だと rsy…

dateコマンドで unix epoch time の int 秒を取得する

date +"%s" bash を使ってて、今の時間を int 表記でタイムスタンプとしてほしいよねってとき。 takuya@~$ date +"%s" 1538853051 こうすれば、Unix秒、つまり1970 からの経過秒数が取得できる。 知っておくと便利だし。Gnu Date の時刻フォーマットなので、…

sudo で シェルのaliasされたコマンドを使えるようにするけど、環境変数を渡さない。

sudo するとコマンドnot found あああ、、もう。 takuya@sakura:~$ sudo ll sudo: ll: command not found alias に頼り切ってると、こういうことが頻繁に起きる 解決策 alias sudo='sudo ' コレが解決策 間違った解決策: preserve Environment sudo -E 環境…

コマンドで重複ファイルを探す。

重複ファイルを探すコマンド find . -type f -exec md5sum {} + | sort | uniq -w32 -dD find して md5sum にかけて sort したら、uniq を取る 解説 コマンドがズラッと並ぶのでひとつずつ見ていく 現在のディレクトリ以下のエントリ(Dir/File)を列挙 find .…

realpathコマンドがなくても諦めずに、代替コマンドを使う

realpath コマンドが無い。 Ubuntuの最小インストールに、realpath コマンドがなかったんです。まぁalpineとかDockerイメージはちょっと便利なコマンドがなくて苦労する。 相対パスを絶対パスに変換する目的でめっちゃ便利なんだけど readlink でなんとかす…

source したファイルで自身のファイル名$0を知る

source my_bashrc.sh bashの設定を読み込むときに、カレントディレクトリを知りたいというか、実行されている自分自身のファイルを知りたい $0 で取れるだろうと思ったら甘かった。 my_bashrc #!/bin/bash echo $0 source してみる。 $source my_bashrc.sh -…

bashのカレントディレクトリがコマンドとして解釈される問題

謎現象が起きた カレントディレクトリのファイルがコマンドとして実行されてしまう。 takuya@Desktop$ ./a aaaaaaaaaaaaaaaaaaaaaa takuya@Desktop$ a aaaaaaaaaaaaaaaaaaaaaa bash で、このような動的に変化するPATHを認めてしまうと思いもよらない動作を引…

ユーザーのbashrc を読み込まずにクリーン起動する

bash で設定を無効にして起動する。 env -i bash --noprofile --norc bash --noprofile --norc だと環境変数が。。 takuya@$ bash --noprofile --norc bash: takuya_prompt_command: コマンドが見つかりません bash-4.4$ bash: takuya_prompt_command: コマ…

bashでCtrl-Cなどシグナルをトラップ(検出)して終了時の処理を書く

bashで ctrl-C の検出をするには bash でCtr-C の検出をする必要がある利用場面がある。たとえば、時間のかかる処理を書いていて途中で止めたいとか、スクリプトを作っていて中間ファイルを確実に消したいとか、Ctr-Cの強制終了で止めたときに「なにか処理」…

ディレクトリ単位でシェルの環境変数を切り替えるdirenv

npm / rbenv / pyenv みたいな感じの bashenv がほしい。 npm などを ディレクトリ単位で切り替えていると、どうしてもbashrc と整合性が合わなくなる時がある。 そのために、ディレクトリ単位でシェルの設定やエイリアスを切り替えられると便利だよね。 っ…

bashの補完のcompgenでハイフン(ダッシュ/-)の引数を補完する

問題点 -list から -listDevice のようなcompletion が出来なくて、invalid option なっちゃう。 $ networksetup -list<TAB> compgen 無効な引数です キーワードの補完ができない。 ハイフンを付けた引数を補完するときは compgen にハイフンをハイフン( -- )で渡</tab>…

bashでファイルを空にする。コマンド3種類

ファイルを空にしたい フォルダやファイルの構造をそのままに、ファイルの中身を空っぽにしたい。 ファイルを消してtouch すれば良いんだろうけど、パーミッション設定しなおしたり面倒くさいよね。ファイルのinodeも変わってしまうので tail してたら tail …

bashでファイルパスの相対パスを得る(絶対パスの取得やパスの正規化も)/realpath利用

realpath で解決 bashスクリプトで2つのファイルパス間の相対パスを取ろうとすると、計算が大変です。 LinuxもMacもrealpath は入ってないので、 apt/brew でいれる必要があります。 realpath のインストール macOS の場合はhomebrew で GNU Linux coreutils…

シェルのalias されたコマンドの展開する - alias-expand-line

シェルのコマンドを展開したい。 composite 使おうとしたら、候補多すぎて面倒くさい。補完が補完にならないよね takuya@~$ com<tab> comm command compare compgen complete compopt composer composite compress comsat 最初の3文字くらいで、展開されてほしい</tab>…

xargsでリダイレクト> を使う方法

xargs やfind exec でリダイレクトを使うには sh を挟むのが覚えやすくて楽 sh -c ' cmd "{}"> out.txt ' find と xargs の例 find . | xargs -I@ sh -c ' echo "@" >> names.txt ' find . -exec sh -c ' echo "{}" >> names.txt ' 参考資料 https://stackov…

jot コマンドが便利。乱数・連番生成で、ループ処理や文字列生成にとてもいい。

jot コマンドを知りました。 jot コマンドは、連番の数字やアルファベットを生成したり、ランダムな数字を生成したりに使えます。 連番ファイル名などを作るのに大活躍です。 上手に使えば、Bashのスクリプトで seq や $RAMDOM よりも便利かもしれないっす。…

ターミナルで改行とEnterで表示がおかしく異常になった時のなおし方

ターミナルで改行や表示がおかしくなった時 たまにありますよね 。\r \n の改行がおかしくなって、エンターキーで改行しても反映されない時って。 こんな感じに、表示で改行と幅がおかしくなってしまうよね。 takuya@:~$takuya@:~$takuya@:~$ takuya@:~$ tak…

bashで実行ユーザがroot(id:1)か調べる

root じゃなきゃ、終了するとかしたい シェルスクリプトの実行ユーザを調べて、root 以外が起動したら処理をしない。などと簡単に書きたい時。 whoami を if 文に突っ込むだけでいい if [[ $(whoami) == 'root' ]] ; then echo user root else echo user is …

grepコマンドでファイル名だけを取り出す。

grep してマッチした行ではなく、ファイル名が欲しい 検索したキーワードを含むファイル名を取り出して、それを全部開いて処理したいときに grep -l -l をつけるとファイル名だけを取り出すことが出来る。 覚え方 l なので line ですね 関連資料:その他のgr…

一時的にaliasをオフにする バックスラッシュ

一時的にalias をオフにしたいとき grep や ls などを使っていて、一時的にalias をオフにしたいことないですか? 私は結構たくさんあります。 grep や ls にいっぱいオプションを付けていて普段はそれを使っているのですが、素のgrep がほしいときはある。 …

lsでファイルを拡張子ごとに並べる

ファイルを種類順に並べたい。 デスクトップの整理でよく見る「ファイルを種類別」に整理と同じ、ファイルを種類順にまとめて結果に表示を ls コマンドでもできることがわかった。 -X で拡張子でまとめて表示 ls -lX こうすると、ext 順にまとめて表示してく…

lsで日付ファイル名の逆順に並べる並べ方

ls で日付・ファイル名・ファイルサイズなどを昇順・降順に並べたい ファイルを並べて結果をだすときに、新しいものから処理したいとか、古いものから処理したいことがあるよね。 ls でファイルの日付順に並べる 新しいものが先になるように並べるには ls -l…

bashのシェルスクリプトで拡張子を取得して利用するときのまとめ

特定の拡張子に○○する的なことはよくある シェルスクリプトを書いていると拡張子で判別したいことはよくある。 bashで拡張子を取得するには bashのブレース展開が一番ラクです。 path=/etc/apache2/httpd.conf extension=${path##*.} #=> conf 特定のディレ…

標準出力と標準エラーのリダイレクト(コピー)について

標準出力と標準エラー出力を扱うときに たまに間違って 1 というファイルが出来てしまって悲しいことになる。 takuya@Desktop$ ll 1 -rw-r--r-- 1 takuya staff 20 2017-04-27 14:51 1 これを防ぐためにちょっと標準出力と標準エラーの扱いをまとめておこう…

Bashでシンボリックリンクのディレクトリの補完(上位ディレクトリが辿れない

シンボリックリンクされたディレクトリから上位が辿れない・・・ シンボリックリンクされたディレクトリがあって、その内部から、補完を試みても、ディレクトリがうまく補完されない。 takuya@vim$ ll -d /usr/local/opt/vim lrwxr-xr-x 1 takuya admin 26 2…