読者です 読者をやめる 読者になる 読者になる

それマグで!

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

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

bashのalias に引数を渡すには?

bash linux

bashのコマンド引数を順番通り、aliasに渡すには?

alias でなく関数を使う

まぁ頻出の話題なので、これくらいは基本ですよねってことで。

alias fooo="/path/to/cmd $@ -opts" は出来ない

alias fooo="/path/to/cmd --opts $@ " # できる
alias fooo="/path/to/cmd $@ --opts" # 出来ない
funciton fooo (){ /path/to/cmd $@  --opts } # 出来る

というわけで、alias だとoptionsと引数の順番を指定できないのです。

代わりにFunctionを使うって話です。

引数はと$@ 使っておけば大丈夫です。

  • $@ 引数全部
  • $1 一個目
  • $2 二個目
  • $3 三個目

のように引数を渡せる。

function はbashrcに

functionは ~/.bashrc などに記述しておくといいでしょう。

echo function foo {} >> ~/.bashrc

もし.bashrc をデフォルトから汚したくない!と思う人は(まれでしょうが)

echo source .bashrc.takuya >> .bashrc
echo function foo {} >> ~/.bashrc.takuya

などと、自前の.bashrcをロードする設定を.bashrcに書いておけば解決ですね。

若しくはコマンドファイルを作る

関数を作る以外には、「コマンド」を作るというのが太古から習わしです。

touch fooo
chomod +x fooo
vim fooo
mv fooo ~/takuya/.bin
export PATH=~/takuya/bin:$PATH

コマンドファイルを作って、PATHを通す。

fooo

コマンドファイルには次のように記述します。

#!/usr/bin/env bash

/path/to/cmd $@ 

記述することはfunciton と同じです。

ファイルを作ると管理が面倒?

一番手っ取り早いのでファイルを作る手段も知っておくと便利です。

function とファイルをどちらを使うべきか

好きな方でいいです。管理の容易さ、一覧性などを考えて好きな方で良いと思います。

ただし、zsh/bash などを使い分ける場合や、ユーザーを切り替えてsu/sudo する場合は「ファイルの方がいいと思います」

function は個人専用だったりシェル・スクリプト中で使うものだと思います。

あれ?これってalias?function?

あれれ?このコマンドってalias のfunciton なの?それともコマンドファイル?

aliasを作りまくってるとわからなくなるので

  • hash
  • type

で確認します。

hash / type の例

type で現在のコマンドがなにか分かります。hash でそのコマンドがどのようにハッシュ(キャッシュ)されているかが分かります。

hash
takuya@~ $ hash
hits    command
   1    /usr/local/bin/rm-trash-by-takuya
   0    /bin/rm
type
takuya@ ~ $ type rm
rm は `rm-trash-by-takuya' のエイリアスです

bashはコマンドをなんどもPATH探索しなくてもいいようにhashテーブルに読み込んでいます。

過去資料

bash(csh)のhashとか言う、気づかないけど便利な機能 - それマグで!

シェルにコマンドが存在するか調べる - それマグで!

広告を非表示にする