Como lidar com espaços e aspas na linha de comando

0

Eu usei este link para evitar que programas usem a conexão com a Internet no Ubuntu / Linux.

No entanto, ainda não consigo concluir a última etapa, conforme mostrado:

$ ni wine C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe
bash: syntax error near unexpected token '('
$ ni "wine C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe"
sh: -c: line 0: syntax error near unexpected token '('
sh: -c: line 0: 'wine C:\Program Files (x86)\Foxit Software\Foxit    Reader\FoxitReader.exe'
$ ni wine "C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe"
Usage: wine PROGRAM [ARGUMENTS...]   Run the specified program
       wine --help                   Display this help and exit
       wine --version                Output version information and exit
$ ni wine FoxitReader.exe
Usage: wine PROGRAM [ARGUMENTS...]   Run the specified program
       wine --help                   Display this help and exit
       wine --version                Output version information and exit
    
por adarsh 16.06.2015 / 08:56

2 respostas

2

Erros de sintaxe significam que o shell tem problemas para interpretar seus comandos. Isso é resultado do fato de que o shell divide palavras baseadas em espaços quando analisa uma linha de comando. Sem aspas, cada parte individual do argumento (como C:\Program ) é tratada como um argumento separado por si só. Você pode usar aspas para impedir a divisão de palavras:

ni wine "C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe"

Isso passa dois argumentos para o comando ni : wine e o caminho completo do Windows para o FoxitReader.

Quando você tentou colocar as aspas duplas de abertura antes de wine , o shell tratou todo o lote wine C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe como um argumento para o comando ni .

Se você quiser evitar problemas semelhantes no futuro, recomendo verificar a wiki do Greg para obter uma explicação detalhada sobre como as ofertas de conchas com espaços . Você pode não entender tudo, mas ainda deve aprender por que, quando e como evitar problemas de divisão de palavras.

    
por Anthony Geoghegan 16.06.2015 / 10:31
1

O que Anthony disse é verdade, você pode usar "" para dizer que o caminho inteiro é uma string, mas talvez isso valha a pena, como com esse método que você pode usar para completar seus caminhos: Há muitos caracteres especiais em um terminal unix, incluindo espaços, *, novas linhas e outros. Você pode ignorá-los digitando um "\" antes deles. Portanto, se uma pasta tiver o nome "Meu teste", você poderá usar cd "My test" ou cd My\ test , que poderá ser concluído. Mas no vinho você provavelmente terá que usar a convenção Michaelsoft Binbows "" (sem ofensas, apenas piadas da Microsoft: D)

"Protip: D" Às vezes, você pode querer, por algum motivo, escrever um caractere "\". Para escrevê-lo, você tem que protegê-lo, então você coloca outro "\" antes dele. Então, se você quer escrever "Caractere Protegido", você realmente faz echo Protected character \ . Observe que o echo aceita argumentos de string para que você não tenha que proteger o espaço.

Espero que ajude:)

    
por IcyIcyIce 16.06.2015 / 11:14