Como verificar se o symlink pode ser criado em um caminho?

0

Context:

A ubuntu Virtualbox VM having shared folders from a Windows host. Provisioner: chef-solo

Supondo que haja um caminho /tmp/shared_data e estou tentando criar um link simbólico como

ln -s /var/www /tmp/shared_data/web_root

Falha ao informar o erro de protocolo

Begin output of "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

Eu imagino que isso é porque desde o caminho que eu estou tentando fazer um link simbólico é o Windows FS e não suporta isso.

Existe uma maneira de detectar se o symlink pode ser criado em um caminho antes de eu tentar e, assim, quebrar minha compilação.

    
por Starx 21.10.2016 / 10:18

1 resposta

1

Você poderia analisar a saída de mount e decidir qual é o tipo de sistema de arquivos para esse caminho. Isso seria o mais portável, mas incômodo (já que apenas fornece informações diretas para os pontos de montagem, não para os subdiretórios). No entanto, algumas abordagens específicas do sistema são dadas em

Provavelmente você está tentando garantir que esse não seja um sistema de arquivos cifs . Por exemplo, você poderia fazer algo assim:

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 

A página de manual de df do Ubuntu diz de -t :

-t, --type=TYPE
limit listing to file systems of type TYPE

que difere de POSIX df :

-t
[XSI] Include total allocated-space figures in the output.

Você pode ter simples ou portável .

    
por 21.10.2016 / 10:31