我经常会无意间创建一个文件。git 不会在我的项目中跟踪它。它只是名为1,仅包含true
我应该检查什么才能知道是什么原因导致创建此文件?
我们在许多 AIX 5.3/6.1 系统中使用 ksh93 测试了以下命令printf
,但它们都失败并得到相同的结果。
这是为什么?
#
# oslevel -s
6100-07-09-1341
#
#
# ksh93 -c 'echo ${.sh.version}'
Version M-12/28/93e
#
#
# ksh93 -c 'printf "%T\n" "now"'
ksh93[1]: printf: T: unknown format specifier
#
#
说我有这个:
str="@test/string"
echo $str
@test/string
echo ${str#@}
test/string
按预期工作,但是
echo ${str//\//-}
ksh: ${str//\//-}: bad substitution
失败。(预期@test-string)
替换/替换这样的字符的正确方法是什么?
echo $KSH_VERSION
KSH version @(#)PD KSH v5.2.14 99/07/13.2
有一个上传过程,读取文件并使用 sqlldr 将数据上传到数据库。在 sqlldr 中处理文件时,我遇到了无效号码问题。发现文件是 UTF-16 格式,然后在 notepad++ 中转换为 UTF-8 格式,它开始工作正常。现在我正在尝试像下面这样系统地转换它。
iconv -f UTF-16 -t UTF-8 file_name >output_file_name
该文件可能具有不同的编码,因此我想在转换之前找到该文件的编码,然后根据该编码进行转换。类似于使用文件命令仅从下面读取 UTF-16,然后在 -f 选项中使用它。
bash-4.2$ file "/FILE_UPLOADS/Relationship (4).txt"
/FILE_UPLOADS/Relationship (4).txt: Little-endian UTF-16 Unicode text, with CRLF line terminators
我怎么做?
我有一个批量运行 SAS 代码run_sas.sh
的命令的包装器。sas
典型的调用如下所示
./run_sas.sh -sysin /my_code/my_program.sas -log /my_log_folder/my_program.log
run_sas.sh
将所有参数传递给sas
with ./sas $*
。sas
然后运行/my_code/my_program.sas
并将日志写入/my_log_folder/my_program.log
.run_sas.sh
分析它被调用的参数/admin/.hidden_log_folder/my_program_<today's date>.log
我想做两个改变:
有些客户绝对希望我在文件夹和文件名中使用空格并要求我运行/their code/their program.sas
,所以如果我运行
./run_sas.sh -sysin "/their code/their program.sas" -log "/their log folder"
/their code/their program.sas
并且/their log folder
应该将单个参数传递给sas
有时我需要运行./sas_utf8
而不是./sas
我懒得维护第二个脚本,所以我想允许一个额外的参数,这样
./run_sas.sh -sysin /my_code/my_program.sas -log /my_log_folder -encoding utf8
会打电话
./sas_utf8 -sysin /my_code/my_program.sas -log /my_log_folder
代替
./sas -sysin /my_code/my_program.sas -log /my_log_folder
我该怎么做,最好是在ksh
?
我对 AIX 和 ksh 都很陌生,但我目前在工作中有一些停机时间,并且正在尝试将我的提示配置为彩色并显示我当前的位置。
目前,我在登录时只获得了一次正确的路径,之后它继续显示我的用户目录。颜色工作正常。日志名和主机名是正确的。
PS1="$(echo "\033[35m`logname`\033[34m@\033[35m`hostname` \033[36m`pwd`\033[1;35m\n\>\033[0m") "
无法显示屏幕截图,但示例输出在任何目录中都会如下所示:
userid@hostname /home/look/a/subfolder
>
我尝试了一堆不同的版本,但要么无法显示任何内容,要么所有特殊字符都以 .profile 的形式出现。
任何想法我做错了什么?
编辑:感谢 Stéphane,ESC+CTRL+V 有效,它是 ksh88。AIX 7.1
我正在读取文件的第一行,标题行,按分隔符拆分|
并将其分配给数组。
IFS='|' read -r -a header < "/file_uploads/file_headers.txt"
这在较低的环境中运行良好,但在较高的环境中它会给出错误,例如
file_upload_process.sh[47]: read: -a: unknown option
Usage: read [-ACprsSv] [-d delim] [-u fd] [-t timeout] [-n count] [-N count]
[var?prompt] [var ...]
file_upload_process.sh[48]: read: -a: unknown option
Usage: read [-ACprsSv] [-d delim] [-u fd] [-t timeout] [-n count] [-N count]
[var?prompt] [var ...]
看起来在较低和较高的环境中存在版本差异并导致此问题?有没有其他方法可以将文件的第一行读入带有分隔符拆分的数组?
管道 (|) 有限的文本文件从 Windows 应用程序传输以进行处理。处理时,文件第一行的第一列中有一个特殊字符。这是从 Windows 传输之前文件在记事本中的外观
Sector|Name|Manager|...
当我阅读IFS='|' read -r -a fields < "/uploads/file_data.txt"
时,第一列扇区被读取为"Sector"
带有前缀的特殊字符。
当我这样做时head -1 "/uploads/file_data.txt" | od -c
,打印的值是
0000000 357 273 277 S e c t o r |
我试过tr -d < //uploads/file_data.txt > /uploads/file_data_temp.txt
但没有帮助。如果将来上传的文件中有任何未知字符,我如何替换特殊字符不仅如此。
我有一个如下所示的数组:
# echo "${ARRAY[@]}"
1=Napp Slice
4=NNN Issue
3=GG Allow
2=CO-OP
1=Quit
我想遍历它以查看是否有任何包含该单词Quit
,如果是,则将该元素设置为一个变量。所以我跑到下面:
for x in ${ARRAY[@]}; do
if [ $x == *Quit* ]; then
FOO=$x
echo $FOO
else
break
fi
done
我想返回给我1=Quit
,但是当我运行它时,我得到:
# ./myScript.ksh
1=Napp Slice
4=NNN Issue
3=GG Allow
2=CO-OP
1=Quit
我怎样才能只取出包含的元素Quit
?
在发布之前,我真的想看看这个问题是否存在,我对 shell 脚本比较陌生。我确信我缺少一些非常简单的东西,但我似乎无法理解。
请仅使用 KSH 语法,因为这就是我可以使用的全部内容。
谢谢!