![Bash 脚本中的目录自动完成](https://linux22.com/image/1415524/Bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%E7%9B%AE%E5%BD%95%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90.png)
Bash 脚本新手在这里编写我的第一个脚本,用于将图片目录从一个地方复制到另一个地方。
#!/bin/bash
# Moves picture directories
cp -R /path/to/pictures/$1 /home/myUser/Pictures/$2
chmod -R 777 /home/myUser/Pictures/
这很好,但我的$1
变量可能是一个相当长的日期信息字符串,所以如果可能的话,我想让它使用标准的制表符自动完成功能。 同样$2
,因为我在图片下有几个子类别,能够用制表符完成它们会很好。
例如: 如果这是唯一以该脚本开头的目录,my_script 2014-07-<tab>
则会自动完成。my_script 2014-07-15
有什么方法可以实现自定义脚本的这一功能吗?在 Ubuntu 14.04 上,如果它有任何后果的话。
答案1
在 *nix 工具中执行此类操作的标准方法是根本不对特定目录进行硬编码,而是将两个路径完整地传递给脚本:
#!/bin/bash
# Moves picture directories
cp -R -- "$1" "$2"
chmod -R 777 "$(dirname -- "$2")"
两个很好的副作用:
- 自动完成功能无需任何额外代码。
- 无论您的图片目录位于何处,即使使用相对路径,该脚本也能正常工作。
如果你有要使用特定路径前缀自动完成,您可以尝试检查bash_completion 代码以及它们如何自动完成路径。