我的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
我尝试将我的shell上传为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
您可以在设置LC_ALL=C
后使用printf '%qn' CDACamp*.txt
来查看文件名将以 7 位干净的 ASCII 字符集呈现的方式(因此,该字符集几乎可以在任何终端上正确呈现(。
如果输出为:
$'/cert/bcp/xcom/emic/CDACampa361a.txt'
。这是您可以放入脚本中的值(只要它以#!/bin/bash
或#!/usr/bin/env bash
运行,而不是#!/bin/sh
(:
cp $'/cert/bcp/xcom/emic/CDACampa361a.txt' localfolder
由于所涉及的所有字符都是 7 位干净的,因此无论您的终端是否正确支持 Unicode(或扩展 ASCII(,它们看起来都是一样的。