我怎样才能做一个变量符号链接根据当前用户,这会指向不同的位置?是否可以?我应该用其他东西代替吗?挂载点?如何?
如果您遇到不同的解决方案,则问题如下:
我们是一个在 Unix 上使用 SVN 进行开发的团队。我们都使用相同的开发机器(远程)。所以我们在不同的地方进行签出(不是/home,而是安装在另一个磁盘上的特定目录,比如说/svn/[userlogin]/)。
我们使用脚本和工具。一些特殊工具具有复杂的配置和项目文件,其中包括源文件的路径。这很容易出错,并且由于错误的配置或需要一直重新创建的“项目”,我们损失了大量时间。我想与所有开发人员共享这个复杂的配置和项目文件。
但为了在不同的结帐时共享此类文件,我必须:
- 即时更正存储在 config/project 中的路径以适应当前用户
- 创建一个“神奇”的固定路径,符号链接/安装/点根据用户指向不同的位置(因此相同的项目文件但指向不同的源)
在此之前,我们使用clearcase,它为每个人安装相同路径的视图(比方说/vob),每个开发人员都会看到他或她自己的视图。那很方便。
我怎样才能做类似的事情?你能想到另一个解决方案吗?谢谢。
- 编辑 -
我在考虑 Eclipse IDE。我想分享一些工作区设置、项目和运行/调试配置。Eclipse(+插件)设置由 50 多个小文件组成,因此无法编辑它们。
使用clearcase,这很容易,这要归功于固定的“/vob”路径,对于每个终端,它会自动指向我们选择的“视图”。
我想要类似的东西。我想要一个/svn/mysource对于每个终端,它指向用户当前的结帐,该结帐位于与用户相关的路径中。
答案1
对于最近查看此内容的人,我编写了一个名为的小型 FUSE 文件系统家庭FS将呼叫转发到相对于呼叫用户主目录的目录。
也就是说,如果您有一个用户 Tyler 和一个用户 Sarah,其 HomeFS 挂载点位于/usr/share/bigsoft/config
且相对目录为.config/bigsoft
,那么当 Tyler 挂载时,ls /usr/share/bigsoft
他将看到 的内容/home/tyler/.config/bigsoft
,而 Sarah 将看到 的内容/home/sarah/.config/bigsoft
。
主要是为了解决专有软件坚持其变量文件位于某个“安装目录”中的情况,就像某些 Windows 软件的工作方式一样。
答案2
这取决于应用程序配置是否可以处理命令或插入 shell 变量。
bash 登录 shell 在登录 shell 中设置环境变量 LOGNAME。
如果应用程序在配置中插入 shell 变量,则可以在配置中使用 /svn/${LOGNAME}/ 。然后,您可以与每个用户共享通用配置,引用她自己的路径。
如果应用程序不在配置中插入 shell 变量,那么您可以为每个用户创建一个符号链接,对 /svn 路径进行通用引用,并在共享配置中使用通用名称。
who
将列出当前用户名。
如果您想编写一个脚本,每个用户在设置时执行一次以创建符号链接。
ln -s /svn/$(who) /svn/anyuser
然后共享引用 /svn/anyuser 的通用配置(选择适合您的通用名称)
当心菜鸟用户不知道链接的使用并将其删除(您刚刚被提升为管理员:)
答案3
所以你希望每个用户在文件系统中看到不同的东西。 Unix 并不是真正按照这种方式设计的(VMS 和 Plan9 让它变得更容易)。
我知道的唯一方法是使用 chroot(),但是你会屏蔽掉不在你切换的层次结构中的所有内容,符号链接将保留在你的层次结构中,而硬链接对目录没有帮助。应该可以使用 FUSE 文件系统来镜像真正的根,同时提供您想要的视图。然后您将 chroot 到该位置。如果您找不到适合您的现有方法,您可以编写一个...
答案4
您无法在 Linux 或大多数其他 unice 上为不同用户创建具有不同内容的符号链接。或者更确切地说,您可以,但只能通过不寻常的文件系统(可能基于保险丝)并且设置会相当困难。
安排所有与用户主目录相关的设置。有些文件/svn/$USER
位于下面并不重要/home/$USER
:只需让每个用户创建一个符号链接/home/$USER/svn -> /svn/$USER
(或为他们创建)。
如果某些应用程序坚持使用绝对路径,请编写一个脚本,将签入路径替换为用户的正确路径,例如
sed -i -e "s:/home/\$USER/:/home/$USER/:g" .eclipse/*
确保在预提交挂钩中转换/home/bob
回文字字符串。/home/$USER