有没有人有幸使用谷歌的gcloud命令行工具获取鱼壳?我不是Fish脚本的专家,但这些是gcloud需要运行的两个文件(可以正常使用Fish的bash模式)。 Fish不允许您从我理解的内容中获取bash文件,因此需要将这些文件转换为Fish脚本?
path.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
path.completion
_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
答案 0 :(得分:27)
对我有用的只是使用低音。看看这个: https://github.com/edc/bass
只需将gcloud添加到您的bash_profile中的行添加到.config/fish/config.fish
文件中,然后将其添加到它们中,如下所示:
# 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'
答案 1 :(得分:3)
对于path.bash,它所做的只是将Cloud SDK bin目录添加到PATH。我们在那里放了一些奇怪的东西,因为我们希望它可以在Cloud SDK目录中工作,即使在后面,例如符号链接。对于您自己的系统,只需执行等效的&#34;导出PATH = $ PATH:/ path / to / google-cloud-sdk / bin&#34;。
对于标签的完成,我不知道fsh的标签是如何工作的,所以我什么都没有。
答案 2 :(得分:2)
鱼群支持现已包含在gcloud的开箱即用中,但我遇到了一个非常讨厌的问题。 google-cloud-sdk/path.fish.inc
中包含的代码(以及@nafg的答案)使目录更改,导致每个新的shell会话从google-cloud-sdk
目录开始。
我做的修改非常简单,添加了两行以获取当前工作目录并在之后恢复。这似乎已经解决了我的问题,所以希望能帮助其他人搜索“fish gcloud”问题。
set restore_dir (pwd -P)
set sdk_dir (builtin cd "$apparent_sdk_dir" > /dev/null; and pwd -P)
set bin_path "$sdk_dir/bin"
cd "$restore_dir"
答案 3 :(得分:2)
截止到今天,我已经能够做到
brew cask install google-cloud-sdk
source /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.fish.inc
添加到了我的~/.config/fish/config.fish
install.sh
。答案 4 :(得分:0)
这里有一个有趣的方法:http://michelpm.com/blog/2013/07/26/switching-from-zsh-to-fish/
基本上它会在bash中运行一个bash脚本,但它会改变环境并将其应用于fish中。
然而,它不会为完成和你的道路而工作。它太过分了。更像是:
if
不需要then
,以end
||
更改为; or
,将&&
更改为; and
所以如果没有在这里测试,我会尝试:
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
答案 5 :(得分:0)
我可以通过执行以下操作来设置完成:
fisher add aliz-ai/google-cloud-sdk-fish-completion
答案 6 :(得分:0)
使用费舍尔:
fisher install lgathy/google-cloud-sdk-fish-completion
你很好走