Gerenciando caminhos - diretórios em shell e scripts

0

Já usei o unix cygwin por um tempo e adicionei muitas ferramentas recentemente, a linha de comando e o script são muito mais familiares. Scripting e programação é o meu objetivo número um e uma pergunta de 100k? Eu não sou weened das janelas ainda though.

O post aqui - > resolveu o dilema dos usuários ! fez muito para facilitar o uso de caminhos e pastas / switching. Melhor que abrir o notepad ++ e fazer isso! Especificamente, este comando

# cd "$(cygpath -u 'c:\Program Files\')" 

por ben. funciona na hora no bash para mim, de modo a permitir a criação de scripts de forma eficiente.

Alguém por causa de programação pode dividi-lo aos poucos?

Eu notei que há 2 comandos e - aspas e os parênteses estão 'separando' o $, que eu suponho ser um espaço variável variável ???

Eu sempre acabo achando que é o shell embutido fazendo isso, a resposta fácil, mas ainda preciso descobrir. E as aspas duplas externas são para o quê, enquanto as citações internas de singe são para espaço e interpretações literais por shell.

Exatamente o que a casca está fazendo do começo ao fim? Executar uma depuração pode ser uma opção Acredito, como faço para mostrar as saídas? Obrigado pela resposta.

Por fim, não mencionei o que usei para tentar converter caminhos. Vi coisas para sed strings mas nunca funcionou devido à complexidade, isso é muito mais simples.

    
por Sircutz 13.09.2016 / 18:35

1 resposta

1

Um equívoco comum é que o sinal $ significa variável. Na verdade, sinaliza bash para executar uma expansão (há casos em que as variáveis podem ser referenciadas sem o sinal $, mas eu não vou sair do assunto).

Quando o bash vê o sinal $ na frente de uma variável, ele substituirá o $ VAR pelo valor (da variável) e depois executará a linha inteira.

No seu exemplo, o bash fará uma substituição / expansão de comando. Entre os parênteses é um comando, bash executará esse comando primeiro, pegue a saída e substitua o $ (comando) por ele, então execute o comando cd .

Você pode observar esse comportamento observando um traço. Execute seu script usando bash -x ou coloque set -o xtrace abaixo do cabeçalho do seu script. Exemplo:

#!/bin/bash
set -o xtrace

Isto mostrará os comandos exatos que o bash está executando durante os scripts, o que significa que ocorreram substituições / expansões.

Quanto às aspas, elas não são 100% necessárias, mas pode haver situações em que o comando no seu exemplo não funcione corretamente. E isto é, se houver algum espaço no caminho retornado por cygpath -u 'c:\Program Files\' . Os argumentos do comando Bash geralmente são delimitados por espaços, e sem as aspas, o bash interpretará esses espaços como um delimitador e não como um espaço literal (também a razão pela qual existem aspas simples ao redor do caminho especificado para o comando cygpath).

Por exemplo, se o caminho retornado for c:\user\Documents and Settings , sem citações, o bash lerá o comando como cd c:\user\Documents and Settings , no qual ele considerará que c:\user\Documents , and e Settings são todos argumentos para ser passado para o comando cd . Isso é um problema porque o comando cd deve ter apenas um argumento.

As aspas duplas em torno da substituição $ impedem a interpretação do espaço.

    
por 13.09.2016 / 19:08