2017-12-09 8 views
1

実行ファイルの名前をパラメータとして使用し、実行ファイルパスにjenkinsによってアーカイブされた実行ファイルをインストールするbourneスクリプトがあります。実行ファイルのbash TABオートコンプリートパラメータ候補を設定する

[email protected]:~# cat `which jinstall` 
#! /bin/sh 

if [ "$#" -eq 2 ]; then 
    if ! [ -e "/var/lib/jenkins/jobs/$1/builds/$2/archive/$1" ]; then 
     echo "$1 build $2 not found" 
     exit 1 
    fi 

    rm /opt/user/bak/$1 2>/dev/null 
    mv /opt/user/bin/$1 /opt/user/bak 2>/dev/null 
    cp /var/lib/jenkins/jobs/$1/builds/$2/archive/$1 /opt/user/bin 
    chown root:user /opt/user/bin/$1 
    chmod 650 /opt/user/bin/$1 
    ls -al /opt/user/bin/$1 
else 
    echo "Usage: jinstall <executable> <build_number>" 
fi 

私が持っている質問です:私はこのスクリプトのパラメータについては、bashのオートコンプリートの候補を設定するのですか?これはBASHシェル用です。

"killall"のようなコマンドといくつかの文字を入力してTabキーを押すと、bashは実行可能ファイル名でパラメータを自動完成します。私は感謝

答えて

2

次のbashスクリプトが有効になりますすでには/ opt /ユーザー/ binにOR

の/ var/libに/ジェンキンス/ジョブ/のサブディレクトリの名前で実行可能ファイルを使用して自動補完するためのパラメータを希望します私は/etc/bash_completion.d/jinstallにこのコードを入れて、それが動作

jinstall_completion() { 
    COMPREPLY=(
     $(
      shopt -s nullglob; 
      for x in /var/lib/jenkins/jobs/"$2"* /opt/user/bin/"$2"* 
      do 
       basename "$x" 
      done|sort -u 
     ) 
    ); 
} 

complete -o filenames -F jinstall_completion jinstall 
+0

:あなたのファイル名が空白のシンボルが含まれていないという仮定の下で自動補完を希望。タイム! –

+0

また、シェル内の自動補完を防ぐために関数名を__jinstall_completionに変更し、追加しました。 [\ 'which jinstall | wc -l \' -eq 0];その後に戻ります。 fiを使用して非rootユーザーを制限する tyvm –

関連する問題