パイプを使用して買収を受け入れるAliasコマンド

パイプを使用して買収を受け入れるAliasコマンド

私のエイリアスを作りたいです~/.bash_profile

  1. 2つの主張を取る$1 $2
  2. 次に渡してください。diff
  3. 出力をパイプで接続less

Stackで私が必要なことをする解決策を見つけることができませんでした。しかし、知っている解決策があれば教えてください! myに次の行が表示されます~/.bash_profile

alias reload='. ~/.bash_profile'
alias aliases='emacs ~/.bash_profile; reload'
function dif () { diff "$1" "$2" | less; }
alias different='dif' 

私が試したとき:

gsuehr$ reload
-bash: /Users/gregorysuehr/.bash_profile: line 93: syntax error: unexpected end of file 

bash機能の使い方を理解していないようです。reload aliases関数宣言をコメントアウトすると、2つのエイリアスが期待どおりに機能することがわかりました。誰でも次の知識を共有できますか?

  1. EOFエラーはなぜ発生しますか?
  2. ここでやりたいことをするためにbashの機能をどのように使用できますか?

ベストアンサー1

パラメーターの後に項目を追加するためにエイリアスを使用することはできず、関数が必要です。コマンドの代替名を指定しalias myalias=mycommandたり()、初期パラメーターを指定した場合(alias myalias='foo --option1 --option2')にのみエイリアスを使用してください。

Bashでは、またはfunction myfunction { … }またはmyfunction () { … }を使用してfunction myfunction () { … }関数を定義できます。この形式は、myfunction () …すべてのshシェルに移植できるという利点があります。キーワードを含むフォームには、エイリアスもfunction機能するという利点があります。この場合、エイリアスを使用して標準フォームを操作できます。エイリアスを除いて、構文は bash で同じです。myfunction\myfunction () …

関数名または次の内容は()正しい形式の複合コマンドでなければなりません。あなたの判断に従って回答(あなたの質問のコードはエラーメッセージを生成しません。明らかにテストしたバージョンをリリースしていません。)あなたの間違いは、複雑なコマンドを誤って書いたことです。中かっこ{はコマンドの最初の項目である場合にのみ開始リストと終了リスト構文として認識されるため、閉じ中括弧の}前に改行またはセミコロンが必要です。

diffまた、2つのパラメータを渡し、残りは無視するのではなく、すべてのパラメータを渡す必要があります。それだけです。"$@"です。

function dif () { diff "$1" "$2" | less; }

また、対話型bashセッションのカスタマイズを.bashrc代わりに入力する必要があります.bash_profile.bash_profileこれは、新しいbashインスタンス(端末など)を開くときではなく、ログインシェルからのみ読み取ることができます。 Bashの設計上の欠陥のため、ログインシェルがインタラクティブで.bashrcあっても読み取れないため、次の行を次の行に入れる必要があります.bash_profile

if [[ $- == *i* ]]; then . ~/.bashrc; fi

インタラクティブなカスタマイズ(たとえば、エイリアス、機能(difキーバインディング、プロンプトなど)など)~/.bashrc

おすすめ記事