Questions tagged «bash-completion»

2
在bash完成的背景下,关于$ {array [*]}与$ {array [@]}的混淆
我第一次尝试编写bash补全,这让我有些困惑,因为这两种取消引用bash数组(${array[@]}和${array[*]})的方式都令人困惑。 这是相关的代码块(顺便说一句,它可以工作,但是我想更好地理解它): _switch() { local cur perls local ROOT=${PERLBREW_ROOT:-$HOME/perl5/perlbrew} COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} perls=($ROOT/perls/perl-*) # remove all but the final part of the name perls=(${perls[*]##*/}) COMPREPLY=( $( compgen -W "${perls[*]} /usr/bin/perl" -- ${cur} ) ) } bash的文档说: 数组的任何元素都可以使用$ {name [subscript]}进行引用。需要使用花括号来避免与Shell的文件名扩展运算符冲突。如果下标为'@'或'*',则单词将扩展为数组名称的所有成员。仅当单词出现在双引号中时,这些下标才不同。如果单词用双引号引起来,则$ {name [*]}扩展为单个单词,每个数组成员的值均由IFS变量的第一个字符分隔,而$ {name [@]}扩展每个name元素换一个词。 现在,我想我知道应该compgen -W期望一个包含可能的替代词列表的字符串,但是在这种情况下,我不理解“ $ {name [@]}将名称的每个元素扩展为一个单独的词”的含义。 长话短说:${array[*]}作品;${array[@]}没有。我想知道为什么,并且我想更好地理解将要${array[@]}扩展的内容。

8
在后台运行bash命令而不打印作业和进程ID
在bash中在后台运行进程非常容易。 $ echo "Hello I'm a background task" & [1] 2076 Hello I'm a background task [1]+ Done echo "Hello I'm a background task" 但是输出是冗长的。在第一行上打印后台任务的作业ID和进程ID,然后我们获得命令的输出,最后获得作业ID,其状态和触发该作业的命令。 有没有一种方法可以抑制运行后台任务的输出,以使输出看起来与没有“ and”符的情况完全相同?即: $ echo "Hello I'm a background task" & Hello I'm a background task 我问的原因是我想将后台进程作为tab-completion命令的一部分运行,因此该命令的输出必须不间断才能有意义。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.