使用bash读取文件时缺少行内容

时间:2013-11-08 10:23:02

标签: bash

我正在尝试阅读此文件(env.cfg)

AXXL_EXCHANGE="/home/company/RECETTE/data"
HOME_LOG="/home/company/RECETTE/logs"
PXXWS_ALERT=user@company.com
PXXWS_DAV=https://URL/ascl/webdav
PXXWS_URL=https://URL/ascl/services
PXXWS_PEM=/home/folder/RECETTE/conf
PXXWS_XSLT=/home/folder/RECETTE/conf
PXXWS_PWD=
PXXWS_CURL="-m 3600 -k" # max-time 3600 (tests)
TMP_DIR=/tmp

使用以下bash脚本(RES.sh)

#!/bin/bash
FILE=$1
# read $FILE using the file descriptors
exec 3<&0
exec 0<$FILE
while read line
do
# use $line variable to process line
echo $line
done
exec 0<&3

这是脚本回显的内容(在控制台上)

AXXL_EXCHANGE="/home/company/RECETTE/data"
HOME_LOG="/home/company/RECETTE/logs"
PXXWS_ALERT=user@company.com
PXXWS_DAV=https://URL/ascl/webdav
PXXWS_URL=https://URL/ascl/services
PXXWS_PEM=/home/folder/RECETTE/conf
PXXWS_XSLT=/home/folder/RECETTE/conf
PXXWS_PWD=
PXXWS_CURL=
TMP_DIR=/tmp

缺少最后一行(PASWS_CURL)右侧

环境:debian wheezy 感谢

2 个答案:

答案 0 :(得分:1)

我复制了您的输入文件和脚本,但没有收到该错误。

如果您信任输入,则可以source $FILE

否则,这似乎比杂耍文件描述符简单:

cat $FILE | while read line; do echo "$line"; done

答案 1 :(得分:0)

使用引号显示它:

echo "$line"

另外,为什么要让文件阅读变得复杂。像这样使用简单的while循环来逐行读取:

while read -r line
do
    echo "$line"
done < "$1"

更新:可能是由于您的文件中存在\r字符。您能否显示cat -vte file的输出并查看输出。