Запуск сценариев оболочки со специальными символами в Unix - PullRequest
0 голосов
/ 09 октября 2018

У меня возникла утомительная проблема с моим сценарием оболочки.Копирует файл с другого сервера на свой.Проблема вот в чем:

Файл, который нужно скопировать, имеет специальный символ в своем имени, например: "CDACampaña".Но когда я открываю свой файл с помощью команды vi, он выглядит как CDACampa ± a.txt (при использовании команды cat он выглядит правильно), и при запуске журнала показывает, что у моего файла больше нет после CDACampa ...

Пример кода моего файла (это не работает, просто для понимания)

#Local machine
blabla code
cp //remote/CDACampaña.txt localfolder
bleble code

#Unix server vi command
blabla code
cp //remote/CDACampaña.txt localfolder
bleble code

#Unix log
blabla code
cp //remote/CDACampa

Я попытался загрузить свою оболочку как UTF8, UTF8 WO BOOM, ANSI и с UNIX или WINDOWS eol, но ничего не получалось.

Пожалуйста, есть идеи?

РЕДАКТИРОВАНИЕ:

Язык Unix:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Кодировка локального компьютера:

IsSingleByte      : True
BodyName          : iso-8859-1
EncodingName      : Europeo occidental (Windows)
HeaderName        : Windows-1252
WebName           : Windows-1252
WindowsCodePage   : 1252
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 1252

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете использовать printf '%q\n' CDACamp*.txt после установки LC_ALL=C, чтобы увидеть, как ваше имя файла будет отображаться в 7-битном чистом наборе символов ASCII (таким образом, тот, который будет правильно отображаться практически на любом терминале).

Если вывод:

$'/cert/bcp/xcom/emic/CDACampa\361a.txt'

... это значение, которое вы можете вставить в ваш скрипт (если он выполняется с #!/bin/bash или #!/usr/bin/env bash, , а не * 1011)* #!/bin/sh):

cp $'/cert/bcp/xcom/emic/CDACampa\361a.txt' localfolder

Поскольку все задействованные символы являются 7-битными чистыми, они будут выглядеть одинаково независимо от того, правильно ли поддерживает ваш терминал Unicode (или расширенный ASCII).

...