Bash 脚本中的目录自动完成

Bash 脚本中的目录自动完成

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 代码以及它们如何自动完成路径。

相关内容