Git Post接收cd没有这样的文件或目录

Git Post接收cd没有这样的文件或目录,git,bash,githooks,Git,Bash,Githooks,我有一个post receive钩子,在这个钩子中,我根据被推送的分支执行一些git签出。在继续执行更多业务逻辑之前,我需要将工作目录更改为存储在变量中的目录。然而,我不断得到一个“没有这样的文件或目录”的错误,尽管目录存在 #!/bin/sh dir=/home/username/directory cd $dir git文件夹本身位于/home/username/git/project 我希望使用完全限定的路径(此路径是固定的,git目录可以在任何地方)尽可能保持cd命令的通用性,因此请

我有一个
post receive
钩子,在这个钩子中,我根据被推送的分支执行一些git签出。在继续执行更多业务逻辑之前,我需要将工作目录更改为存储在变量中的目录。然而,我不断得到一个“没有这样的文件或目录”的错误,尽管目录存在

#!/bin/sh

dir=/home/username/directory
cd $dir
git文件夹本身位于/home/username/git/project

我希望使用完全限定的路径(此路径是固定的,git目录可以在任何地方)尽可能保持cd命令的通用性,因此请不要使用
cd.././directory
stuff


有人知道为什么这不起作用吗?

路径中有空间吗?
cd“$dir”
效果更好吗?嗯?完全限定路径是最不通用的,因为它只适用于单个位置;相对路径意味着您可以重新定位子树并使代码仍能工作,只要相关组件彼此保持在相同的位置。无论如何,
set-x
是您的朋友。如果文件中有隐藏字符(例如,一个离群的DOS换行符),它将显示在
set-x
output中。但首先,添加缺少的引号。@charlesduff抱歉,我对“通用”部分的表述有点不正确。声明变量中的路径在整个脚本中始终是固定的。通过说generic,我希望能够使用
set-x
将post-receive脚本放在服务器的任何git目录中(因此没有../.stuff)@CharlesDuffy,这似乎是cd试图调用的路径:
/home/username/directory\342\200\250
。。。