Shell程序将特殊字符(如<和&)引号引起来

时间:2019-07-04 15:37:06

标签: bash shell scripting

我有一个通用的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并将整个行放入变量中,以便扩展单引号。那没有用。

0 个答案:

没有答案