Bash 脚本特殊字符和后台作业错误

Bash 脚本特殊字符和后台作业错误
gnome-terminal --tab -e "
sh -c '
 gedit'/media/ubuntuman/Onces And for Al/scripts/faceBook' & ;
 sudo cpulimit -e ubuntu-tweak -l 80;'"

这是我要编辑的一段代码。'中的 特殊字符(单引号)sh -c会与 的单引号冲突gedit,我该如何解决?

我还发现,如果我在后台运行第一个作业,终端就不会执行第二个作业sudo cpulimit……为什么?

答案1

请尝试以下命令,它应该启动两个作业:

gnome-terminal --tab -e "
sh -c '
 (gedit /media/ubuntuman/Onces\ And\ for\ Al/scripts/faceBook &) ;
 sudo cpulimit -e ubuntu-tweak -l 80;'"

括号表示 bash 中的子 shell。引用手册页:

   (list) list is executed in a subshell environment (see  COMMAND  EXECU‐
          TION  ENVIRONMENT below).  Variable assignments and builtin com‐
          mands that affect the  shell's  environment  do  not  remain  in
          effect  after  the  command completes.  The return status is the
          exit status of list.

答案2

由于您没有在文件名中使用任何特殊(即,对于 shell 来说特殊的)字符,并且没有给出任何进一步的命令,因此您可以使用该-x选项并省略 shell 周围的引号:

gnome-terminal --tab -x bash -c \
   'gedit "/media/ubuntuman/Onces And for Al/scripts/faceBook" & \
    sudo cpulimit -e ubuntu-tweak -l 80'

请注意,后面&不需要跟;

相关内容