我已经玩了一段时间的 bash 自动完成功能,但找不到解决我的问题的方法。我有一个包含如下子文件夹的项目目录:
现在,我想有一个命令,把它cdproject
在那里我可以cd
在我的项目目录及子目录内的任何子文件夹。这个命令应该提供一个自动完成功能,我可以在其中输入cdproject pr --> TAB TAB
,然后获取一个列表,例如ruby/project1
, ruby/project2
, rails/project3
...
我的问题是如何处理子目录。程序cdproject
看起来像这样
#!/bin/bash
cd $1
Run Code Online (Sandbox Code Playgroud)
在cdproject-autocompletion.bash
这个样子的
_cdproject()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts=$(ls ~/Dropbox/projects)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
}
complete -o default -o nospace -F _o o
Run Code Online (Sandbox Code Playgroud)
而我的里面.bash_profile
,我的来源cdproject-autocompletion.bash
与
source ~/cdproject-autocompletion.bash
所以任何人的想法,如何实现这一目标?也许opts
应该返回 subdir 结构,ruby/project1
但是自动完成应该只对最后一部分起作用,即实际的项目名称。我不知道这怎么可能。
我正在使用 Dropbox 在我的 MacBook 和 iMac 之间同步文件。我的问题是,Dropbox 在同步期间将文件权限从 0755 更改为 0644,反之亦然。我想知道为什么。
我还使用 Dropbox 来同步一些 git 存储库,这很烦人,因为 git 总是说,文件权限已更改。
所以我的问题是:有没有办法阻止 Dropbox 同步文件权限?还是有其他想法?