【问题标题】:Different behavior from ubuntu server and ubuntu client on windowsWindows 上 ubuntu 服务器和 ubuntu 客户端的不同行为
【发布时间】:2013-02-13 10:26:18
【问题描述】:
#!/bin/bash

# Reading

cat /home/radiare/Desktop/first.txt | while read LINE

do
if [ "$LINE" == "false" ]; then
echo "Inside first loop"
break
fi
done

cat /home/radiare/Desktop/second.txt | while read LINE

do
if [ "$LINE" == "false" ]; then
echo "Inside second loop"
break
fi
done

在 ubuntu 客户端中,如果语句正常工作,我可以执行此脚本并在内部回显。我在 ubuntu 服务器上做了同样的事情,它没有进入 if 语句。唯一的区别是我在服务器上使用 sudo 运行。

有什么建议吗?

【问题讨论】:

  • 呵呵,和stackoverflow.com/questions/14848147/…几乎一样的代码。列出的文件是否存在于服务器上?如果它存在于服务器上,root 是否有权访问该文件(例如远程文件系统)?您是否发现任何错误?
  • 我没有看到任何错误。该文件还使用 sudo 权限执行。它正在访问的其他文件也具有读写权限。它一直运行到最后,但它没有进入 if 循环。这意味着它没有读取指定的 txt 文档。当我在控制台中运行 cat 并回显内容时,它会正确返回内容。
  • 客户端和服务器上的文件完全相同吗?我的意思是字节相同?
  • sudo cat /home/radiare/Desktop/first.txt 和 second.txt 一样需要显示和客户端一样的内容,如果你看到像false% 这样的行,则说明末尾没有新行该文件,这就是它没有被解析的原因。

标签: linux shell unix ubuntu


【解决方案1】:

奇怪,我不能评论,只能“回答”。

我认为该文件是MS DOS格式,当您在windows上的ubuntu客户端下运行脚本时,它会理解MS DOS格式,并进行相应处理。

但是,在服务器端,当你使用 read LINE 读入 MS DOS 格式的行时,你也会读入结尾的 \r 字符。

我敢打赌这就是原因。试试

tr -d '\015' /home/radiare/Desktop/first.txt

首先再次运行您的脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2012-09-13
    • 2018-02-27
    • 2020-04-08
    相关资源
    最近更新 更多