26

フィッシュ シェルを Google の gcloud コマンド ライン ツールで動作させることができた人はいますか? 私は Fish スクリプトの専門家ではありませんが、これらは gcloud が実行する必要がある 2 つのファイルです (Fish の bash モードを使用すると問題なく動作します)。Fish では、私が理解しているものから bash ファイルを入手することはできないので、これらを Fish スクリプトに変換する必要がありますか?

パス.bash

script_link="$( readlink "$BASH_SOURCE" )" || script_link="$BASH_SOURCE"
apparent_sdk_dir="${script_link%/*}"
if [ "$apparent_sdk_dir" == "$script_link" ]; then
  apparent_sdk_dir=.
fi
sdk_dir="$( command cd -P "$apparent_sdk_dir" && pwd -P )"
bin_path="$sdk_dir/bin"
export PATH=$bin_path:$PATH

パス補完

_python_argcomplete() {
    local IFS=''
    COMPREPLY=( $(IFS="$IFS"                   COMP_LINE="$COMP_LINE"                   COMP_POINT="$COMP_POINT"                   _ARGCOMPLETE_COMP_WORDBREAKS="$COMP_WORDBREAKS"                   _ARGCOMPLETE=1                   "$1" 8>&1 9>&2 1>/dev/null 2>/dev/null) )
    if [[ $? != 0 ]]; then
        unset COMPREPLY
    fi
}
complete -o default -F _python_argcomplete "gcloud"

_completer() {
    command=$1
    name=$2
    eval '[[ "$'"${name}"'_COMMANDS" ]] || '"${name}"'_COMMANDS="$('"${command}"')"'
    set -- $COMP_LINE
    shift
    while [[ $1 == -* ]]; do
          shift
    done
    [[ $2 ]] && return
    grep -q "${name}\s*$" <<< $COMP_LINE &&
        eval 'COMPREPLY=($'"${name}"'_COMMANDS)' &&
        return
    [[ "$COMP_LINE" == *" " ]] && return
    [[ $1 ]] &&
        eval 'COMPREPLY=($(echo "$'"${name}"'_COMMANDS" | grep ^'"$1"'))'
}

unset bq_COMMANDS
_bq_completer() {
    _completer "CLOUDSDK_COMPONENT_MANAGER_DISABLE_UPDATE_CHECK=1 bq help | grep '^[^ ][^ ]*  ' | sed 's/ .*//'" bq
}

unset gsutil_COMMANDS
_gsutil_completer() {
    _completer "CLOUDSDK_COMPONENT_MANAGER_DISABLE_UPDATE_CHECK=1 gsutil help | sed /Additional/q | grep '^  ' | sed -e 's/^  //' -e 's/ .*//'" gsutil
}

unset gcutil_COMMANDS
_gcutil_completer() {
    _completer "CLOUDSDK_COMPONENT_MANAGER_DISABLE_UPDATE_CHECK=1 gcutil help | grep -v '^information' | grep '^[a-z]' | sed -e 's/ .*//' -e '/^$/d'" gcutil
}

complete -o default -F _bq_completer bq
complete -o default -F _gsutil_completer gsutil
complete -o default -F _gcutil_completer gcutil
4

7 に答える 7

46

私にとってうまくいったのは、ベースを使用することだけでした。確認してください: https://github.com/edc/bass

次のように、gcloud が bash_profile に追加する行を取得し、.config/fish/config.fishファイル内でそれらの行の先頭に Bass を追加します。

# The next line updates PATH for the Google Cloud SDK.
bass source '/Users/hunter/bin/google-cloud-sdk/path.bash.inc'

# The next line enables shell command completion for gcloud.
bass source '/Users/hunter/bin/google-cloud-sdk/completion.bash.inc'
于 2016-04-25T01:19:54.187 に答える
0

ここに興味深いアプローチがあります: http://michelpm.com/blog/2013/07/26/switching-from-zsh-to-fish/

基本的には bash スクリプトを bash で実行しますが、環境を変更して fish に適用する方法を diff します。

ただし、補完では機能せず、path.bash ではやり過ぎです。もっと好き:

  • var=value を変更して var 値を設定します
  • [ ... ] を test ... に変更します。
  • $( ... ) を ( ... ) に変更
  • if必要なくthen、で終わるend
  • ||; orに変更&&_; and
  • エクスポートを set -x に変更

したがって、テストせずに、次のことを試してみます。

set script_link ( readlink "$BASH_SOURCE" ); or set script_link $BASH_SOURCE
set apparent_sdk_dir ${script_link%/*}
if test "$apparent_sdk_dir" == "$script_link" ;
  set apparent_sdk_dir .
end
set sdk_dir ( command cd -P "$apparent_sdk_dir"; and pwd -P )
set bin_path $sdk_dir/bin
set -x PATH $bin_path:$PATH
于 2014-08-25T09:36:44.803 に答える
0

フィッシャーを使用:

fisher install lgathy/google-cloud-sdk-fish-completion

そして、あなたは行ってもいいです

于 2020-04-17T01:31:08.573 に答える