Linux 在新bash实例中以脚本形式执行一组命令

Linux 在新bash实例中以脚本形式执行一组命令,linux,bash,shell,unix,heredoc,Linux,Bash,Shell,Unix,Heredoc,我正在尝试在新的bash会话中执行一组命令: exec bash <<- EOF ln -snf $JDK_REPO'/jdk'$1 $CURRENT; JAVA_HOME=$(readlink -f $CURRENT); echo $JAVA_HOME; export PATH= $JAVA_HOME/bin:$PATH; exec usejdk EOF 我试着用调试,我得到: 使用这样做对我很有用: cmd=" ln -snf $JD

我正在尝试在新的
bash
会话中执行一组命令:

exec bash <<- EOF
   ln -snf $JDK_REPO'/jdk'$1 $CURRENT;
   JAVA_HOME=$(readlink -f $CURRENT);
   echo $JAVA_HOME;
   export PATH= $JAVA_HOME/bin:$PATH;
   exec usejdk 
   EOF
我试着用调试,我得到:


使用这样做对我很有用:

cmd="
   ln -snf $JDK_REPO'/jdk'$1 $CURRENT;
   JAVA_HOME=$(readlink -f $CURRENT);
   echo $JAVA_HOME;
   export PATH= $JAVA_HOME/bin:$PATH;
   exec usejdk"
bash <<< "$cmd"
cmd=”
ln-snf$JDK_回购'/JDK'$1$当前;
JAVA_HOME=$(readlink-f$当前);
echo$JAVA_HOME;
导出路径=$JAVA_HOME/bin:$PATH;
执行官usejdk“

bash和Makefile一样,必须使用制表符缩进。很有趣,谢谢@glennjackman,我将再次尝试使用herdoc方法,以确保我没有犯空格杀手的错误。谢谢@Lynch,我看到
养成总是引用变量的习惯是件好事。否则会发生奇怪的事情。
bash
总是会发生奇怪的事情。
Use <<- instead of << if you want to indent the end token.
cmd="
   ln -snf $JDK_REPO'/jdk'$1 $CURRENT;
   JAVA_HOME=$(readlink -f $CURRENT);
   echo $JAVA_HOME;
   export PATH= $JAVA_HOME/bin:$PATH;
   exec usejdk"
bash <<< "$cmd"