2026年2月4日水曜日

aliasを "cd"にするの やめましょう

aliasを "cd"にするの やめましょう
whichで見てから やりましょう

 また既に思い切りオチがバレていますが┐(´・_・`)┌
aliasのことを書こうと思う。
unixに触り初めて、先輩や同僚がいろいろコマンドを打ち込んでいるのを見ている時に、?とか!となる瞬間があって、しばらく他のIDのを見たり、そもそもをmanで調べたりして、凝る時期が来る。そうaliasでのコマンド短縮、なんでも1文字でも短くしたい時期が来るものだ。


当時、cで始まるなんかがあって、そこのディレクトリに移る必要があったかなんかでいじっていたら、全てのscriptが動かなくなってしまった。なんだなんだとrootで入って調べたら、「"cd"をaliasで上書きしていた」。そう「"cd"をaliasしてあるから動かない」という事が原因だった( ̄○ ̄)
当時は画面が小さかったので、フルパスで入力や出力で書いたり、1行使って変数に入れるとか無駄に思えたので、workのディレクトリに移動してしまって、その後パスは全て省略していた。(そうすることで、その後少し変えて流用〜別のデータに置き換えるとか一手間増やしたりとか〜の時も、workのディレクトリを変えるだけでok♩)と思っていたが、それが裏目に出て何も出来なくなってしまった。

aliasおすすめとかで検索すると、ほおおお、というのが出てくるけど、まずはこれを言いたい

  1. 既に定義されているものにaliasしないよう、whichコマンドで確認しよう。
  2. cshだとaliasさせたいコマンドが複数あって";"とかで繋ぐ時は、\!*で次に入力する($1にあたる)引数やファイル名を拾ってくれる、ってのもつい最近知った。(bashだと普通に$1とからしい)
  3. aliastest.txtとかのファイルにaliasの行を入れて、source alias-test.txtで試してから.cshrcに入れること。裏でcronで動かしてるのは速攻こけ、次にログインした時にも!!!となるので注意( ̄○ ̄)

単純にcdでも、/home/user/data/2025log/への移動も
alias cddata 'cd /home/user/data/`date +%2`log'
とすると楽々。
2025年度なら
alias cddata 'cd /home/user/data/`date +%2y --date "-3month"`log'
です。今日の3ヶ月前の年が年度(FY)と気付くと1月になった途端一つ楽になった感がする。

別エントリにも書いたけど、lessに起動したとき検索したいパターンをaliasに埋め込んでしまう方法&dateコマンドで今月や今日の日付を入れてしまうと、
less --pattern="`date +%d/%b/%Y`" /var/log/access_log
今日の最初のイベントの行まで飛んで、日付が無事ハイライトされる。

注意:
.cshrc/.bashrcにがいきなり書かず、テストをして、しばらくログイン時に自動に読み込まないようにして十分試してからということと、date --dateで"月"monthを使うときは、2月が絡むとバグる
(1月31日の1ヶ月後が3月1日を返す、3月1日の1ヶ月前は1月31日を返す→ログ・ファイルやディレクトリの2月分が抜けるT_T、2月分を集計しない( ̄○ ̄)ということになるので、そこは注意だ。
(そういう時は、今月のmだけ取って来て、m月10日の1ヶ月後or1ヶ月前という地味な方法で回避しているwすべてunixtimeに変換する関数を作ってprintfで好きな表示方法にするのが基本なのかも知れないが、dateコマンドに丸投げも楽♫)