基于svn ls 实现的SVN目录自动补全

本文介绍了一个用于 SVN 的自动补全脚本实现,该脚本通过 bash shell 编程来完成对 svn checkout 命令的路径补全功能。通过分析当前输入的状态,该脚本可以提供相应的目录或文件选项。

参考了系统自带的cd 自动补全功能

参考网址:
http://kodango.com/bash-competion-programming
http://www.2cto.com/kf/201609/551995.html
http://www.jb51.net/article/56563.htm
系统版本:
Protobuf.noteRed Hat 4.8.2-16

shell代码:

# .svn co
#svn co 的补全功能
echo "dtcwyp svn co"

function svn_co()
{
    local IFS=$'\n'
    START_DIR="svn://192.168.0.6/svn/"
    COMPREPLY=()
    local input1 input2 input3 input5 input6
    local -a input4
    local z y
    input1="${COMP_WORDS[0]}"
    input2="${COMP_WORDS[1]}"
    input5="${COMP_WORDS[2]}"
    input6="${COMP_WORDS[3]}"
    for((i=4;i<=$COMP_CWORD;i++));do
        z="$z${COMP_WORDS[$i]}"
    done
    input3=$(echo "${z}"|sed 's/\\//g')

    if [[ $input2 = "co" ]] && [[ $input1 = "svn" ]];then
        if [ -z "$input3" ];then
            COMPREPLY=( $(compgen -W "$START_DIR" -- ) )
        else
            y=`svn ls ${input5}${input6}${input3%/*}/ 2>/dev/null`
            if [[ ! -n $y ]];then
                #echo "START_DIR is error,can't get list"
                return 0
            fi
            x=$(compgen -W "${y}" -- ${input3##*/})
            while read "LINE"
            do
                input4+=( "${input3%/*}/$LINE" )
            done <<< "$x"

            if [[ ${#input4[@]} -ne 0 ]]; then
                compopt -o filenames 2>/dev/null
                COMPREPLY+=( "${input4[@]}" )
            fi
        fi
    fi
}
echo "support svn co complete"
complete -o nospace -F svn_co svn co
echo ""
在使用 `chown` 命令时出现 `cannot access path to your repo: No such file or directory` 错误,通常表示系统无法找到指定的文件或目录路径。以下是一些常见的原因和解决方法: ### 1. 路径拼写错误 检查你提供的路径是否正确,包括大小写、斜杠(`/`)以及路径中的任何特殊字符。Linux 文件系统对路径大小写敏感,因此路径中的每个字符都必须完全匹配。 **示例:** ```bash chown -R user:group /var/lib/svn/repo1 ``` 如果路径 `/var/lib/svn/repo1` 不存在,就会出现错误。请确保路径正确,并且目录或文件确实存在。 ### 2. 路径不存在 确保你尝试更改所有权的目录或文件已经存在。可以使用 `ls` 命令检查目录是否存在: ```bash ls -l /var/lib/svn/ ``` 如果目录不存在,需要先创建它: ```bash mkdir -p /var/lib/svn/repo1 ``` ### 3. 使用 `SVNParentPath` 配置时的路径问题 如果你在 Subversion 配置中使用了 `SVNParentPath`,确保你提供的路径是正确的父目录路径,并且该目录下包含有效的仓库子目录 [^1]。例如: ```bash SVNParentPath /home/svn ``` 这意味着 `/home/svn` 目录下应该包含多个仓库目录,如 `/home/svn/repo1` 和 `/home/svn/repo2`。 ### 4. 权限问题 确保你有足够的权限访问目标路径。如果你没有权限查看或修改目标目录,`chown` 命令也会失败。可以使用 `sudo` 来提升权限: ```bash sudo chown -R user:group /var/lib/svn/repo1 ``` ### 5. 检查文件系统挂载问题 如果目标路径位于一个挂载点(如 NFS 或其他网络文件系统),确保该文件系统已经正确挂载,并且路径在远程服务器上存在。 ### 6. 使用 `realpath` 检查路径 可以使用 `realpath` 命令来检查路径是否有效,并获取其实际解析路径: ```bash realpath /var/lib/svn/repo1 ``` 如果返回 `No such file or directory`,说明路径确实不存在。 ### 7. 自动补全路径 在命令行中输入路径时,可以使用 Tab 键自动补全路径,以减少拼写错误的可能性。 ### 示例:正确使用 `chown` 命令 假设你想将 `/var/lib/svn/repo1` 目录及其内容的所有权更改为用户 `svnuser` 和组 `svngroup`,可以执行以下命令: ```bash sudo chown -R svnuser:svngroup /var/lib/svn/repo1 ``` ### 8. 检查符号链接 如果路径包含符号链接,请确保它们指向有效的目标。可以使用 `ls -l` 来查看符号链接的状态: ```bash ls -l /var/lib/svn ``` ### 9. 使用 `strace` 调试 如果仍然无法确定问题,可以使用 `strace` 工具来跟踪 `chown` 命令的系统调用,查看在哪一步出现了错误: ```bash sudo strace -f chown -R user:group /var/lib/svn/repo1 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值