Bashで複数行エイリアスを作成する方法は?

Bashで複数行エイリアスを作成する方法は?

より速く呼び出すために、複数行コマンドのエイリアスを作成したいと思います。コピー - 貼り付け - 実行テキストファイルから出るたびに。

そのようなコマンドの例は次のとおりです。リモートアップデート手順の実行注文する:

(
cd "${program_to_update_dir}"
wget https://raw.githubusercontent.com/USER/PROJECT/BRANCH/update.sh
source update.sh
rm update.sh
)

数年前、私はBashデザインの制限のために複数行コマンドのエイリアシングが不可能であることを学びました。しかし、それ以降にプログラムが変更され、今は可能です。


それでも可能でない場合は、そのコードで関数を生成し、すべてのシェルセッションにエクスポートして(サブセッションをほとんど使用しませんが、最後にこれを行ったことを覚えていません)、Somehowを呼び出すことができると思いました。 。

適切で安全な場所に梱包した場合は、exportedで梱包してください名前付き関数必要に応じて話したり.bashrc電話したりしますか?.bash_profile

答え1

これは不可能ではありません。

alias thing='(
cd "${program_to_update_dir}"
wget "https://raw.githubusercontent.com/USER/PROJECT/BRANCH/update.sh"
source update.sh
rm update.sh
)'

または、

alias thing='( cd "${program_to_update_dir}"; wget "https://raw.githubusercontent.com/USER/PROJECT/BRANCH/update.sh"; source update.sh; rm update.sh )'

エイリアスの問題は、それを正しく参照するのが難しいことです。テキスト文字列、そして彼らはより適しています本当に短い

alias ls='ls -F'

ほとんどすべての場合、シェル関数が必要です。

thing () (
    cd "${program_to_update_dir}"
    wget 'https://raw.githubusercontent.com/USER/PROJECT/BRANCH/update.sh'
    source update.sh
    rm update.sh
)

または、update.sh現在のディレクトリの名前を使用せずに(関連していないファイルで使用可能)、成功した場合にのみwget実行しcdbashシェルを少し単純化するように修正されました。

thing () (
    cd "$program_to_update_dir" &&
    source <( wget --quiet -O - 'https://raw.githubusercontent.com/USER/PROJECT/BRANCH/update.sh' )
)

(スクリプトを実行したり、配管したり、-lineで使用するインタプリタを使用する代わりにupdate.sh使用したい場合があります。これを使用しているという事実は混乱しています。サブシェルが終了するとスクリプトが実行される環境希望する理由)が失われます。bashbash -s#!sourcesourcesource

シェル関数は、エイリアスが定義されているのと同じ初期化ファイルで定義でき、エイリアスと同じ方法で使用されますが、より一般的です(パラメータなどを受け入れることができます)。

マニュアルにはbash次の内容が含まれています。

ほとんどすべての目的で、エイリアスはシェル関数に置き換えられます。

関連情報