Devo usar uma barra no final das variáveis de caminho no shell script ou não? [fechadas]

11

Hoje, quando escrevo meu script de shell.

De repente, uma pergunta vem à minha mente.

Como cd /target_dir e cd /target_dir/ funcionam.
Devo adicionar uma barra no final das variáveis do meu caminho em um script de shell?
Como LOG_PATH=/data/nginx/logs versus LOG_PATH=/data/nginx/logs/ .

Eu fiz uma pesquisa grosseira no google, mas não encontrei discussão sobre isso, talvez seja muito básico?

Por enquanto, é muito difícil decidir qual estilo escolher.
Mas eu preferi um estilo LOG_PATH=/target_dir/ mais.
Porque quando eu estou fazendo autocompletion com o bash, ele me mostra o resultado com barra.

Qual é a sua opinião sobre isso, por quê?

    
por Zen 29.06.2015 / 11:40

3 respostas

8

De acordo com POSIX:

Definition of a pathname:

A string that is used to identify a file. It has optional beginning < slash > characters, followed by zero or more filenames separated by < slash > characters. A pathname can optionally contain one or more trailing < slash > characters. Multiple successive < slash > characters are considered to be the same as one < slash >, except for the case of exactly two leading < slash > characters.

    
por 29.06.2015 / 12:14
6

Para garantir, inclua a barra. Isso pode levar a várias barras ao concatenar os caminhos, mas pelo menos você evita problemas.

Alguns exemplos: rsync trata os caminhos de maneira diferente se a barra final estiver incluída (sincroniza o diretório em vez de criar outro subdiretório). Links simbólicos para diretórios às vezes se comportam de uma maneira inesperada quando eles não têm a barra final - pelo menos a conclusão da shell fica confusa. Você nunca sabe se o comando / script que você invoca depende da verificação da barra para algum comportamento especial. Pode até evitar que você sobrescreva alguma coisa. Por exemplo, se você tem um arquivo chamado foo , mas erroneamente acha que é um diretório e quer mover algo nele, então mv bar foo sobrescreverá o arquivo (perda de dados, possível catástrofe), mas mv bar foo/ apenas reclamará e não faça nada.

Então, para concluir, na maioria dos casos isso não importa, mas você deve usar a barra para se proteger, e também tornar mais óbvio para o leitor humano o que você pretendia fazer em um script. Um observador casual terá certeza de que uma variável se refere a um diretório, se ele terminar com uma barra, e irá usá-lo corretamente se precisar ser modificado.

    
por 29.06.2015 / 12:55
3

Não, você não deveria. Adiciona uma barra extra desnecessária ( / ).

exemplo

digamos que você deseja exportar o diretório bin do java para sua variável PATH ,

export PATH=$PATH:/opt/jre1.7.0_45/bin/

agora confira,

user@host:~$ which java
/opt/jre1.7.0_45/bin//java

observe a barra extra ( / ) antes do java, mas felizmente isso só funciona nesse caso.

    
por 29.06.2015 / 11:59