Então, estou escrevendo um pequeno gerenciador de pacotes, e um problema que encontrei é criar os links simbólicos para os arquivos.
Ele instala o pacote /usr/pkg/name-version
e lê um arquivo para determinar quais links simbólicos criar. Estou usando ln
para criar os links e tive um problema ao tentar instalar os cabeçalhos da API do Linux. Eu preciso vincular os arquivos de cabeçalho, não as pastas que os contêm (por isso, se 2 pacotes precisarem colocar arquivos no mesmo subdiretório de include, eles podem, sem estragar um pacote).
Resolvi esse problema, mas ln
simplesmente erro se o caminho estiver incompleto, o que é irritante porque esses diretórios não deveriam existir até que o pacote seja instalado.
Existe um sinalizador para ln
isso, que criará os diretórios que estão faltando, ou eu precisarei usar algum script complicado do bash?
fonte
mkdir
para ... criar diretórios?lndir
.Respostas:
Você não precisará de um script bash complicado, mas de uma linha simples.
mkdir --parents
cuidará de tudo, nem mesmo imprimir um erro se a estrutura de diretórios já existir.Apenas tenha cuidado com o tratamento desses diretórios na remoção, para não quebrar outros pacotes.
Além disso, como você está escrevendo
bash
, pode dar uma olhada na feitiçaria (plugue descarado). Talvez seja mais simples apenas modificar isso, pois é maduro e flexível.fonte
system()
não é mais fácil, é muito difícil escapar dos argumentos da linha de comando corretamentesystem()
. No mínimo, você deve usarposix_spawn()
orfork()+exec*()
, que aceita argumentos de linha de comando como matrizes.Não há sinalizador para fazer isso
ln
. Criar diretórios não é seu trabalho.mkdir -p foo/bar/qux
criará efoo
, conforme necessário. Portanto, chame primeiro todos, exceto o último componente do caminho.foo/bar
foo/bar/qux
mkdir -p
Parece que você está reinventando
o wheelStow , um gerenciador de pacotes simples que mescla hierarquias de diretórios, criando diretórios com a profundidade necessária, com links simbólicos para componentes de diferentes pacotes internos. Ou talvez o XStow , que é como o Stow, mas com mais possibilidades de personalização.fonte
Talvez
tar
possa ajudar a preparar o arquivo com os links:E então, para criar os links onde necessário:
fonte