私はLINUX(ubuntu 14)を使用していますが、新しく購入したラップトップではシェルを使用する必要がありました。以前は、Cシェルを使用し、エイリアスを でbash
。.bashrc
.cshrc
.bashrc
しかし、うまくいかないのは遅延議論です。たとえば - 私の.cshrc
コマンドは次のようになります。
alias rm 'mv -f \!* $HOME/zap'
.bshrcに次のように書くと
alias rm = 'mv -f \!* $HOME/zap'
エラーメッセージの生成:
bash:alias: rm: not found
bash:alias: mv -f \!* $HOME/zap: not found
(このディレクトリはzap
私が事前に作成したものです。)
代わりに何を使うべきですか\!*
?
ベストアンサー1
このような場合は、エイリアスの代わりにシェル関数を使用する必要があります。より多くのタイピングが必要ですが、より柔軟性を提供します。
function rm {
if ! test -d "$HOME/zap"; then
echo "No zap in home" >&2
return 1
else
mv -f -- "$@" "$HOME/zap/"
fi
}
コマンドラインで$@
指定した引数に展開されます。コマンドラインフラグの終わりを通知する必要があります(rm
ファイルがどこにあるか、可能であり、多くのコマンドラインフラグがとにかく共有されないように)。--
rm -f
-f
rm
mv
元のコマンドにアクセスするには、またはをrm
使用します。\rm
command rm
存在するかどうかをテストし$HOME/zap
、標準エラーにエラーメッセージを出力し、関数がゼロ以外の終了状態で終了することは、必要なものは何でもできることを示しています。明らかに、これを次のように単純化できます。
function rm {
mv -f -- "$@" "$HOME/zap/"
}
マニュアルbash
には次の内容が含まれています。
ほとんどすべての目的で、エイリアスはシェル関数に置き換えられます。
ls
エイリアスは、お気に入りのロゴなどにタグを付ける場合にのみ便利です。