正如 Ignacio Vazquez-Abrams 已经提到的,不要使用别名。事实上,它甚至写在参考手册的别名部分:
对于几乎所有目的,shell 函数都比别名更受欢迎。
所以你需要这个功能:
do_something() {
[[ -n $1 ]] && cp -rnvt ~/test folder-"$1"
}
如果您不喜欢我编写的cp
所有选项的方式,只需删除它们。有关信息:
-n
以免覆盖现有文件/文件夹
-v
以至于冗长
- 以下目录
-t
为目标目录
(我喜欢这样写我cp
的 s,你的版本cp
可能无法处理这个问题,但很可能会处理)。
还有一个检查以确保在启动cp
.
到目前为止,没有什么比其他答案更好的了。关于完成,您可以执行以下操作:
_do_something() {
COMPREPLY=( $(
shopt -s nullglob extglob
files=( folder-+([[:digit:].])/ )
for ((i=0;i<${#files[@]};++i)); do
files[i]=${files[i]#folder-}
files[i]=${files[i]%/}
done
compgen -W "${files[*]}" -- "${COMP_WORDS[COMP_CWORD]}"
) )
return 0
}
complete -F _do_something do_something
把它放在你的.bashrc
(即使它可能不是完成的最佳位置,当你更有经验时你会调整所有这些)并享受!
从这里你会想要扩展它,直到它变成一个 100000 行的精彩脚本。例如,我添加了-n
选项cp
(我相信这是一个很酷的安全功能)。然后,您可能希望向do_something
函数添加选项,例如--force
将删除此选项的-n
选项。我不会为你做这件事(这超出了这个答案的范围),不过这并不难。然后确保您也相应地更改完成功能!其乐无穷。