我有一个通用的Shell脚本,可用来运行项目中的所有主程序。 这样写是为了使代码测试过程自动化。
我现在有一个程序,需要通过标准输入进行用户输入。可以提供一个输入文件,该文件将模仿来自用户的数据输入。
但是,在运行脚本时,外壳程序将特殊字符'<'括在单引号中,这会破坏目的并迫使用户输入数据。
您能协助我解决此问题吗?
我的脚本如下:
#! /usr/bin/env bash
setUp ()
{
cd $proj || \
{ echo "Unable to access folder $proj";exit 1;}
[ -e $setupScript ] && \
{ ./$setupScript || \
{ \
echo "Error running setup script";\
exit 1;\
}\
}
cd ..
}
runJVM()
{
jarFile="$proj-$version.jar"
if [ -e $jarFile ]
then
setUp
echo "Main class(es): $main"
for a in "${main[@]}";
do
echo "Running $a...";echo
(java $runOptions -cp $jarFile:$proj $a)
done
exit 0;
fi
}
readRunOptions()
{
[ -e $proj/$runOptionsFile ] && \
{ runOptions=$(cat $proj/$runOptionsFile) || \
echo "Unable to read $proj/$runOptionsFile";}
}
declare -r setupScript="setup"
declare -r mainFile=".main"
declare -a main
proj=$1
declare -r runOptionsFile=".runoptions"
runOptions=""
version="1.0.0"
main[0]=$2
if [ -z $2 ]
then
readarray main < $proj/$mainFile || \
{ echo "Error reading $proj/$mainFile";usage; }
fi
echo $proj
readRunOptions
runJVM
.main文件将具有以下格式:
refactoringguru.iterator.example.Demo < one.test
refactoringguru.iterator.example.Demo < two.test
可以在以下位置找到该项目的Java源代码:
https://github.com/Fernal73/LearnJava/tree/master/Iterator
您还可以在以下位置查看Shell脚本的先前版本:
https://github.com/Fernal73/LearnJava/blob/master/run
如上所述,我正在使用的当前版本为:
https://github.com/Fernal73/LearnJava/blob/master/runj
不幸的是,尽管它适用于.main文件中的第一个条目,但它在退出脚本的下一个条目处掉了下来。
在我的安装脚本中,项目目录下的安装脚本中有两个相同的条目,其中特殊字符<用于输入数据。那很好。
我不是Bash或Shell编程专家。我边走边学,用自己需要的东西。
我尝试在java命令之前使用bash -c并将整个行放入变量中,以便扩展单引号。那没有用。