私のエイリアスを作りたいです~/.bash_profile
。
- 2つの主張を取る
$1 $2
- 次に渡してください。
diff
- 出力をパイプで接続
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つのエイリアスが期待どおりに機能することがわかりました。誰でも次の知識を共有できますか?
- EOFエラーはなぜ発生しますか?
- ここでやりたいことをするために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
。