【问题标题】:Weird behavior in bashrc: concatenate, same code run/fail [duplicate]bashrc 中的奇怪行为:连接,相同的代码运行/失败 [重复]
【发布时间】:2017-01-04 19:07:43
【问题描述】:

我有一个装有 CentOS 6 的虚拟机,我正在从 bashrc 加载一些脚本。 一切正常,但我想将相同的代码和脚本复制粘贴到同一 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

终端输出(似乎“连接”它正在替换从第一个字符串/变量的乞求开始的字符:

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/

我认为我使用了一些非常不合适的东西。但我不确定我应该寻找什么或什么。

欢迎任何建议或建议。

谢谢!

【问题讨论】:

  • 最后一部分好像是windows的行尾。

标签: bash random centos6 behavior carriage-return


【解决方案1】:

这里没有显示,但是您的脚本在 shell 定义行中有回车符。编辑它们(例如使用 Notepad++ 或 tr -d "\015" &lt; yourscript.sh &gt; newscript.sh

您可以将脚本重定向到一个文件,您将看到该文件中的所有文本。

回车符 (asc 13, \r) 只是重置光标而不跳到换行符。之后写入的每个文本都会覆盖当前行中的文本。 Windows 使用它来补充换行符。 Windows 文本模式就是这样

【讨论】:

  • 啊,对不起,那个“测试”是一个测试,我复制错了。现在是正确的代码
  • 我从答案中删除了代码。
  • 非常感谢,我刚刚在 gedit 中为 \r 使用了“替换”,一切正常。非常奇怪的行为......我肯定会随时记住它。
猜你喜欢
  • 2018-01-09
  • 1970-01-01
  • 2018-05-01
  • 2019-01-25
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多