パラメータをネストして別のエイリアスを呼び出す方法

パラメータをネストして別のエイリアスを呼び出す方法

2つの別名があります(明らかに隠されています)。

alias ki='kinit -kt ~/.keytab alexdodd@box'
alias pt='function _pritunl() {/Applications/Pritunl.app/Contents/Resources/pritunl-client start 0e7e534335bsdfds6eaeb8e023a5ce4 --password XXXX$1; echo attempting pritunl login };_pritunl'

私は間違いなくそれらを互いに接続して、次のように順番に実行できると思いました。

alias ptki='function _ptki() {
      pt $1
      ki
      if [ "$DEV_STACK_NAME" -ne 1 ]; then
         echo "Starting devstack"
         devstack start
      fi
         }'

しかし、引数$ 1はエイリアスptに渡されません(構文解析エラーが発生しました)`、私は愚かであることを知っていますが、ここに何かがありませんでした。私は検索しようとしましたが、私たちは基本的なように見えるので、何がわかりません。私が探しています。

明らかに私はbashスクリプトに触れたことがありません=/私が学ぶべきものの長いリストに追加する

エイリアス "ptki"を使って3つのエイリアスを順番に実行したいと思います。 ptkiはパラメータを取得して渡す必要があります。

最初は引数を受け入れ、それをエイリアスに渡します。 2番目は最初のものから10秒待つ必要があります。 3 番目は DEV_STACK_NAME が存在する場合にのみ実行されます。

答え1

まず、読みやすさとメンテナンスが容易であるため、関数定義で別名を「ショートカット」として使用しないことをお勧めします。もともと異なる意図を持つ関数やスクリプトで実装されたことを覚えたり、さらには知っているのです。

次に、スクリプト/関数でエイリアスを使用する必要がある場合、マンbashページは非対話型シェル(スクリプトなど)ではエイリアスが拡張されないことを示しています。その中で拡張するには、スクリプト内で実行するようにこれらのエイリアス(通常または)を定義するファイルとshopt -s expand_aliasesスクリプトを追加する必要があります。私にとっては、スクリプト内で調達することはどんな場合にも最適ではありません。主に、特定のホストシステムに何があるのか​​は常にわからないからです。デフォルトでは、スクリプト内でシェルエイリアスを呼び出すには、次のものが必要です。source~/.bashrc~/.bash_aliases
~/.bashrc~/.bashrc
誰でもBASH_ENV呼び出し bash シェル環境で環境変数を定義します。または#!/usr/bin/bash -iスクリプトで shebang として使用されます。man bashスクリプトシェルをインタラクティブにする方法のセクションを見て見つけてください。BASH_ENV

しかし(再び)これは良い習慣に違反し、遅かれ早かれ、あなたや他の人がスクリプトでエイリアスを虚偽として使用して問題に遭遇することを意味します。代わりに機能を試してください。

したがって、示した小さなコードの内容を扱うことなく、呼び出されたスクリプトで実行する必要がある方法は、基本的に次のようmy_scriptになります。

#!/usr/bin/bash

function _pritunl() {
    /Applications/Pritunl.app/Contents/Resources/pritunl-client start \ 
    0e7e534335bsdfds6eaeb8e023a5ce4 --password XXXX"$1"
    echo "attempting pritunl login" 
}

function _ptki() {
    _pritunl "$1"
    kinit -kt ~/.keytab alexdodd@box

    if [ "$DEV_STACK_NAME" -ne 1 ]; then
        echo "Starting devstack"
        devstack start
    fi
}

_ptki "$1"

.. 次に、スクリプト(my_script)を実行可能にし、実行するか、直接実行します。

$ bash my_script first_arg

これはスクリプトの最初の位置パラメータfirst_argに対応します。$1

上記のスクリプトには問題があり、リストの最初のものは@roaimaがOPの説明で指摘したものです。これはおそらく問題を解決する正しい方法ではないでしょう。しかし、もしそうなら以下が必要であることを覚えておいてください。

  • シェルで正しく拡張できるように、変数を二重引用符で囲みます。
  • すべての変数が使用可能であるか、スクリプトで適切に定義されていることを確認してください(考えてみてください$DEV_STACK_NAME)。これを行うには、呼び出し環境からスクリプトに変数を渡す必要があるかもしれません。これを行ういくつかの方法が文書化されている。ここそして他のウェブサイト。
  • printf代わりに使用echoし、なぜこれが起こるのか理解してください。より良いもの
  • ...

関連情報