Bashでエイリアスをラップする

Bashでエイリアスをラップする

古い.cshrcファイルを.bash_aliasesファイルに変換します。変換中にいくつかの構文問題が発生しましたが、これにはより深いBashの知識が必要です。

[t]Cshでは、&シンボルを使用してバックグラウンドで開かない限り、xwindowアプリケーションを開くとシェルがハングします(たとえば、firefox &)これを防ぐためにCshで特定のエイリアスを作成してバックグラウンドジョブで実行しますが)。コマンドラインを開く(使用\!*):

alias ff 'firefox \!* &

Bashに変換されたら、次のことを行います。

ff () { command ff "$@" & }

いつ機能を使用するのか、いつ使用するのかはまだわかりません。ニックネームしかし、定義されたエイリアスの周りに多くのオプションをラップしようとすると中断されます。

win () { command xterm -geometry 105x25 -font 8x13 -bc "$@" & }
blue () { command win -bg gray33 -fg gray39 "$@" ; }

削除したら注文する以内に(例blue () { win -bg ...:)期待どおりに動作します。


だから私は2つのことが気になります。

  1. エイリアスと関数定義をいつ使用する必要がありますか?
  2. いつコマンドを使用しますか?使用するにはalias win='xterm ...'どうすればよいですかcommand win

ベストアンサー1

まず、マイナーな作業にこの関数を使用してください。単純なエイリアスは、基本的にいくつかのフラグを設定することです。

# no license spam
alias gdb='gdb -q'

より複雑なほとんどすべてに関数を使用します。

2.commandコマンドなどを参照してください/bin/ls。エイリアスはコマンドではなく、機能はコマンドではありません。おそらくwinコマンドがないため、command winコマンドではないため、関数を呼び出すことはできません。

ところで、「無限」ループは作成が非常に簡単です。

alias fooalias=foofunc
function foofunc() { fooalias; }

これが誰かが関数を書く理由です。コマンドと同じ名前これにより、commandシェルが関数を永久に呼び出そうとしないように非常に便利になります。

# loops until stack death or segfault or something
function xterm() { xterm ... }

# good
function xterm() { command xterm ... }

他の関数にコマンドまたは関数である可能性がある他の関数を呼び出すには、そのまま呼び出すだけです。このコマンドを必ず呼び出す必要がある場合は、必ず使用してくださいcommand

function winwinwin () { winwin ... }
function winwin () { win ... }
function win () { xterm ... }
function xterm () { command xterm ... }

winwinwin関数がwinwin呼び出されます。win関数がxterm呼び出されますcommand

以前はこれはオプションですが、後ろに空白がある可能性がある項目を見つけるのではなく、関数function()を検索するのはかなり簡単なので、使用し、エラーには括弧が必要です。fgrep function ...エンジンでEscapedを使用している正規表現は何ですか?優先順位のために通知を簡単にテストまたは印刷して、進行状況を確認できます。

ls () { ls -k; echo funcall; }
alias ls='echo blat'
ls

一般に、驚きを避けるために関数を最初に定義してからエイリアスを設定する方が良い考えです。

bash-4.1$ alias ls='echo blat'
bash-4.1$ ls () { command ls -k; echo funcall; }
bash: syntax error near unexpected token `('
bash-4.1$ function ls () { command ls -k; echo funcall; }
bash-4.1$ 

おすすめ記事