我的shell脚本有麻烦的问题。它将文件从另一台服务器复制到其上。问题出在这里:
要复制的文件的名称中有一个特殊字符,例如:“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=
本地PC编码:
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
答案 0 :(得分:2)
设置printf '%q\n' CDACamp*.txt
后,可以使用LC_ALL=C
来查看如何以7位纯净ASCII字符集呈现文件名(因此,几乎可以在任何终端上正确呈现的文件名)
如果输出为:
$'/cert/bcp/xcom/emic/CDACampa\361a.txt'
...这是您可以在脚本中输入的值(只要它与#!/bin/bash
或#!/usr/bin/env bash
一起运行,不 #!/bin/sh
):< / p>
cp $'/cert/bcp/xcom/emic/CDACampa\361a.txt' localfolder
由于涉及的所有字符都是7位纯净的,因此无论您的终端是否正确支持Unicode(或扩展ASCII),它们的外观都相同。