语境:
具有来自 Windows 主机的共享文件夹的 ubuntu Virtualbox VM。供应商:厨师独奏
假设有一条路径/tmp/shared_data
,并且我尝试在其上创建一个符号链接,例如
ln -s /var/www /tmp/shared_data/web_root
它失败说协议错误
开始输出“bash”“/tmp/chef-script20161020-6826-kore5t”----
==> dev: STDOUT: ==> dev: STDERR: ln: failed to create symbolic link ‘/tmp/shared_data/web_root’: Protocol error ==> dev: ---- End output of "bash" "/tmp/chef-script20161020-6826-kore5t" ---- ==> dev: Ran "bash" "/tmp/chef-script20161020-6826-kore5t" returned 1
我想这是因为我尝试创建符号链接的路径是 Windows FS 并且不支持它。
那么有没有一种方法可以在我尝试之前检测是否可以在路径中创建符号链接,从而破坏我的构建。
答案1
你可以解析输出mount
并确定该路径的文件系统类型。这将是最可移植的,但很麻烦(因为它只提供挂载点的直接信息,而不提供子目录的信息)。然而,一些特定于系统的方法在
您可能希望确保这不是cifs
文件系统。例如,你可以这样做:
if df -t cifs /tmp/shared_data/web_root 2>/dev/null
then
echo cannot make a symbolic link...
else
ln -s /var/www /tmp/shared_data/web_root
fi
的手册页乌班图的df
说-t
:
-t, --type
=类型
限制列出该类型的文件系统类型
这不同于POSIX df:
-t
[XSI]
在输出中包括总分配空间数字。
所以你可以拥有简单的或者便携的。