bash 脚本中的 Standard_in 错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3143529/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Standard_in error in bash script
提问by Jessica
I have two bash scripts that are almost identical. One works and one doesn't and I can't figure out what's going on. Here are the scripts:
我有两个几乎相同的 bash 脚本。一个有效,一个无效,我无法弄清楚发生了什么。以下是脚本:
This one works fine:
这个工作正常:
#!/bin/bash
CURDIR=$HOME/Documents/Development/road/Earthmoving
TOL=0.05
echo -e "\nRunning Unit Tests"
echo -e "------------------\n"
for infile in $CURDIR/utest/*.csv
do
file=$(basename $infile .csv)
echo -n " Test $file"
value=`$CURDIR/Release/earthmove -f $infile`
res=`cat $CURDIR/utest/$file.res`
if [ "$(echo "$res+$TOL*$res >= $value && $res-$TOL*$res <= $value" | bc)" -eq 1 ]; then
echo -e "\t\t PASSED."
else
echo -e "\t\t FAILED."
fi;
done
echo ""
But this one gives me all kinds of errors:
但是这个给了我各种各样的错误:
#!/bin/bash
CURDIR=$HOME/Documents/Development/road/Vertical
TOL=0.05
echo -e "\nRunning Unit Tests"
echo -e "------------------\n"
for infile in $CURDIR/utest/*.csv
do
file=$(basename $infile .csv)
echo -n " Test $file"
value=`$CURDIR/Release/vertical -f $infile`
res=`cat $CURDIR/utest/$file.res`
if [ "$(echo "$res+$TOL*$res >= $value && $res-$TOL*$res <= $value" | bc)" -eq 1 ]; then
echo -e "\t\t PASSED."
else
echo -e "\t\t FAILED."
fi;
done
echo ""
The two files are IDENTICAL besides the directory (Earthmoving vs Vertical) and the program name (earthmove vs vertical). I know this because I created the second by copying and pasting the first. Running the second script results in this:
除了目录(Earthmoving vs Vertical)和程序名称(earthmove vs Vertical)之外,这两个文件是相同的。我知道这一点是因为我通过复制和粘贴第一个来创建第二个。运行第二个脚本会导致:
Running Unit Tests
------------------
Test flatroad(standard_in) 1: illegal character: S
(standard_in) 1: syntax error
(standard_in) 1: illegal character: :
(standard_in) 2: illegal character: S
(standard_in) 2: illegal character: :
(standard_in) 2: syntax error
(standard_in) 2: illegal character: N
(standard_in) 2: illegal character: :
(standard_in) 2: illegal character: I
(standard_in) 2: illegal character: :
(standard_in) 2: illegal character: :
(standard_in) 2: illegal character: O
(standard_in) 2: illegal character: :
(standard_in) 3: illegal character: P
(standard_in) 3: illegal character: :
(standard_in) 3: syntax error
(standard_in) 3: illegal character: M
(standard_in) 3: illegal character: :
(standard_in) 3: illegal character: H
(standard_in) 3: illegal character: :
(standard_in) 3: illegal character: :
(standard_in) 4: illegal character: P
(standard_in) 4: illegal character: :
(standard_in) 4: syntax error
(standard_in) 4: illegal character: M
(standard_in) 4: illegal character: :
(standard_in) 4: illegal character: H
(standard_in) 4: illegal character: :
(standard_in) 4: illegal character: :
(standard_in) 5: syntax error
(standard_in) 5: illegal character: :
(standard_in) 6: illegal character: P
(standard_in) 6: illegal character: :
(standard_in) 6: illegal character: M
(standard_in) 6: syntax error
(standard_in) 6: illegal character: :
(standard_in) 7: syntax error
(standard_in) 7: illegal character: :
(standard_in) 8: illegal character: P
(standard_in) 8: illegal character: :
(standard_in) 8: syntax error
(standard_in) 8: illegal character: M
(standard_in) 8: illegal character: :
(standard_in) 15: syntax error
(standard_in) 16: syntax error
(standard_in) 16: illegal character: M
(standard_in) 16: illegal character: I
(standard_in) 16: illegal character: P
(standard_in) 17: syntax error
(standard_in) 18: illegal character: T
(standard_in) 18: illegal character: S
(standard_in) 18: illegal character: T
(standard_in) 18: syntax error
(standard_in) 19: illegal character: T
(standard_in) 19: illegal character: S
(standard_in) 19: illegal character: T
(standard_in) 19: syntax error
(standard_in) 20: illegal character: T
(standard_in) 20: illegal character: S
(standard_in) 20: illegal character: T
(standard_in) 20: syntax error
(standard_in) 21: illegal character: T
.
.
.
(standard_in) 90: illegal character: I
(standard_in) 90: illegal character: O
(standard_in) 90: syntax error
(standard_in) 90: illegal character: P
(standard_in) 90: illegal character: I
(standard_in) 90: illegal character: I
(standard_in) 90: illegal character: T
(standard_in) 91: syntax error
(standard_in) 91: syntax error
(standard_in) 91: syntax error
(standard_in) 91: syntax error
(standard_in) 93: illegal character: S
(standard_in) 93: syntax error
(standard_in) 94: illegal character: O
(standard_in) 94: syntax error
(standard_in) 95: syntax error
(standard_in) 96: illegal character: U
(standard_in) 96: syntax error
(standard_in) 96: illegal character: '
(standard_in) 96: illegal character: O
(standard_in) 96: illegal character: '
FAILED.
There are plenty more lines where the "..." is, but they're basically just a variation on the same idea.
“...”所在的行还有很多,但它们基本上只是同一想法的变体。
回答by Paused until further notice.
The error messages are produced by bc
. The problem is that there is something like "S:S:N:I::O:P..." in the file "$HOME/Documents/Development/road/Vertical/utest/$file.res" that's not in the corresponding file that's used in the other script. Chances are that you expect that file to contain a single numeric value instead of whatever is in there now.
错误消息由 产生bc
。问题是文件“$HOME/Documents/Development/road/Vertical/utest/$file.res”中有类似“S:S:N:I::O:P...”的东西不在在另一个脚本中使用的相应文件。您可能希望该文件包含单个数值,而不是现在包含的任何数值。
回答by kalaivani
(standard_in) 1: syntax error
(standard_in) 1: 语法错误
This error will be solved by using perlinstead of bc command,
这个错误将通过使用perl而不是 bc 命令来解决,
$(perl -e "print $b+$c")
$(perl -e "打印 $b+$c")
回答by pborenstein
Check the contents of the Vertical directory. Does one of your CSV files have spaces or odd characters in its name? Try surrounding the variable that holds a file name in quotes:
检查 Vertical 目录的内容。您的 CSV 文件之一的名称中是否包含空格或奇数字符?尝试将包含文件名的变量括在引号中:
"\"${filename}\""