我有一台带有CentOS 6的虚拟机,我正在从bashrc加载一些脚本。 一切正常,但我想在同一个VM的旧备份中复制粘贴相同的代码和脚本,但我收到一个错误:“意外的文件结束”。当我想与他分享这些脚本时,同样的错误也不得不与另一个人打交道(他有相同的VM)。
所以我开始稍微调试一下,发现他不喜欢它的一行(它正在解析一个数组:
COUNTER=1
while [[ ! -z ${SCRIPT[$COUNTER]} ]]; do
他也不喜欢这个(它与“while”逻辑不完全相同,但它确实起作用):
for i in ${Script[@]}; do
所以,我将其替换为:
for ((i = 0; i < ${#SCRIPT[@]}; i++)); do
现在我尝试使用相同的代码获取错误名称,并且不再发生错误。
此外,我有这种行为,这是最奇怪的: 代码:
BASH_SCRIPTS_LOCATION='/mnt/hgfs/Shared-workspace/scripts/'
SCRIPT[0]='aliases.sh'
SCRIPT[1]='scripts_config.sh'
SCRIPT[2]='credentials.sh'
SCRIPT[3]='other_functions.sh'
SCRIPT[4]='ssh_functions.sh'
SCRIPT[5]='release_functions.sh'
SCRIPT[6]='test_functions.sh'
for ((i = 0; i < ${#SCRIPT[@]}; i++)); do
loadedScript=${BASH_SCRIPTS_LOCATION}${SCRIPT[$i]}
echo -e "$loadedScript"
done
终端输出(似乎是“连接”它正在替换从第一个String /变量的乞讨开始的字符:
aliases.shShared-workspace/scripts/
scripts_config.shworkspace/scripts/
credentials.shed-workspace/scripts/
other_functions.shorkspace/scripts/
ssh_functions.sh-workspace/scripts/
release_functions.shkspace/scripts/
test_functions.shworkspace/scripts/
我认为我使用的东西非常不恰当。但我不确定我应该寻找什么或者什么。
欢迎任何建议或建议。
谢谢!
答案 0 :(得分:0)
它没有在这里显示但是你的脚本在shell定义行中有回车符。编辑它们(例如使用Notepad ++或tr -d "\015" < yourscript.sh > newscript.sh
)
您可以将脚本重定向到一个文件,您将看到文件中的所有文字。
回车符(asc 13,\r
)只是重置光标而不跳到换行符。之后写的每个文本都会覆盖当前行中的文本。 Windows使用它来补充换行符。 Windows文本模式就像那样