Quando posso omitir o caractere de ponto que indica o diretório atual

3

Devo usar ponto para indicar o diretório atual para acessar diretórios ou devo usá-lo apenas para arquivos?

Por exemplo, se o diretório atual for foo e contiver bar directory e baz.txt file, quando posso omitir o caractere de ponto?

./bar
./baz.txt
    
por FrozenHeart 10.02.2016 / 09:45

2 respostas

2

Bem, você pode omitir o caractere de ponto das pastas, se desejar, mas as duas estão OK

cd ./bar

ou

cd bar

são equivalentes - mas você concorda que o segundo é mais conveniente.

Se você deseja executar o seu arquivo bar.txt (que pode ser executável com chmod 755 , por exemplo), então você tem que usar o indicador ./

./bar.txt executará o script

bar.txt não fará nada

cat bar.txt ou cat ./bar.txt fará o mesmo.

espero que ajude:)

EDIT: se você quiser ter mais informações sobre o porquê ./ é necessário para executar o script, basta seguir:

Because on Unix, usually, the current directory is not in $PATH. When you type a command the shell looks up a list of directories, as > specified by the PATH variable. The current directory is not in that list.

(@ cnicutar)

    
por 10.02.2016 / 09:59
2

Em locais que esperam um caminho para um arquivo, ./foo é equivalente a foo . Existem apenas alguns lugares onde escrever ./foo é útil.

Escrever ./foo é útil quando o que é esperado não é necessariamente um caminho, mas possivelmente um nome de arquivo que pode ser pesquisado em um caminho de pesquisa. O caso mais comum é quando invocando um comando executável. Os programas executáveis são pesquisados em diretórios listados na PATH variable , mas essa pesquisa só é executada se o dado nome do comando não contém uma barra. Portanto, ls chama o comando ls encontrado no PATH (geralmente /bin/ls ), enquanto ./ls chama o programa executável ls no diretório atual. Mais geralmente, escrever ./foo também ignora qualquer apelido, função ou código de shell chamado foo .

Outro uso para o prefixo ./ é evitar problemas com nomes de arquivos que começam com alguns caracteres especiais. Em particular, quando você passa um nome de arquivo como um argumento para um comando, na maioria dos casos, o comando permite opções começando com - . Se o nome do arquivo vier de uma variável, talvez você não tenha certeza de que o nome do arquivo não começa com - . Escrever "./$filename" em vez de "$filename" garante que não será interpretado como uma opção se começar com - . No entanto, isso só funciona se $filename for um caminho relativo (ou seja, não começando com / ). Outro método mais geral de proteger nomes de arquivos é colocá-los após -- na linha de comando: mycommand -- "$filename" ( -- convencionalmente indica que o que segue são argumentos não-opcionais apenas) (no entanto, isso nem sempre funciona em um caso específico: se $filename for - , muitos comandos tratam isso como significando “entrada padrão”). Sobre este tópico, consulte também Por que meu script de shell sufoca em espaços em branco ou outros caracteres especiais? e Implicações de segurança de esquecer de citar uma variável em shells bash / POSIX

    
por 11.02.2016 / 01:17