首先,我需要在Ruby和Bash脚本之间使用相同的信息。
我从未这样做过,或者从未使用过YAML。为什么我会想到YAML,Ruby是否从标准库中得到了相当好的支持。问题是我找不到任何有关Bash和YAML交互的信息。我想写一些YAML文件(比如说,foo.yml)并在两个脚本中使用它的内容:bar.rb和baz.sh。
也许YAML的用法有误吗?在程序之间共享数据的最正确方法是什么?
答案 0 :(得分:1)
YAML支持bash不支持的复杂数据结构。想到的第一个例子是Associative Arrays。
我建议从Ruby生成适当的数据结构,并在bash中使用它们。
. <(/path/to/your/ruby/script --generate-completion-data)
使用--generate-completion-data调用ruby脚本的输出应该是一个有效的bash脚本,定义将在完成脚本/过程中使用的变量
例如:
CMD_OPTS=(--help --print --version)
CMD_F_OPTS=(--audio --video)
您的完成脚本可能如下所示:
. <(/path/to/your/ruby/script --generate-completion-data)
__is_file_opt {
for element in ${CMD_F_OPTS[*]};
if [[ $1 == $element ]]; then
return 0;
fi
done
return 1;
}
__ruby_script_complete {
local cur prev
COMPREPLY=()
#_get_cword is a function defined by /etc/bash_completion in Ubuntu, returns
# the current word to complete may not be available in your version
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
if [[ "$cur" == -* ]]; then
COMPREPLY=($( compgen -W "${CMD_OPTS[*]} ${CMD_F_OPTS[*]}" -- "$cur" ))
return 0;
fi
if __is_file_opt $prev; then
COMPREPLY=( $( compgen -f -- $cur ) \
$( compgen -d -- $cur ) )
fi
return 0
}
注意:上面的脚本没有经过测试,只是一个例子