より速く呼び出すために、複数行コマンドのエイリアスを作成したいと思います。コピー - 貼り付け - 実行テキストファイルから出るたびに。
そのようなコマンドの例は次のとおりです。リモートアップデート手順の実行注文する:
(
cd "${program_to_update_dir}"
wget https://raw.githubusercontent.com/USER/PROJECT/BRANCH/update.sh
source update.sh
rm update.sh
)
数年前、私はBashデザインの制限のために複数行コマンドのエイリアシングが不可能であることを学びました。しかし、それ以降にプログラムが変更され、今は可能です。
それでも可能でない場合は、そのコードで関数を生成し、すべてのシェルセッションにエクスポートして(サブセッションをほとんど使用しませんが、最後にこれを行ったことを覚えていません)、Somehowを呼び出すことができると思いました。 。
適切で安全な場所に梱包した場合は、export
edで梱包してください名前付き関数必要に応じて話したり.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
実行しcd
、bash
シェルを少し単純化するように修正されました。
thing () (
cd "$program_to_update_dir" &&
source <( wget --quiet -O - 'https://raw.githubusercontent.com/USER/PROJECT/BRANCH/update.sh' )
)
(スクリプトを実行したり、配管したり、-lineで使用するインタプリタを使用する代わりにupdate.sh
使用したい場合があります。これを使用しているという事実は混乱しています。サブシェルが終了するとスクリプトが実行される環境希望する理由)が失われます。bash
bash -s
#!
source
source
source
シェル関数は、エイリアスが定義されているのと同じ初期化ファイルで定義でき、エイリアスと同じ方法で使用されますが、より一般的です(パラメータなどを受け入れることができます)。
マニュアルにはbash
次の内容が含まれています。
ほとんどすべての目的で、エイリアスはシェル関数に置き換えられます。