从 shell 脚本调用终端来显示命令结果

从 shell 脚本调用终端来显示命令结果

我编写了一个脚本来调用终端并运行一系列命令。终端出现但没有其他命令的结果。我将文件命名为显示服务状态.sh将其放在主目录中,并使用chmod +x

显示服务状态.sh包含以下命令:

gnome-terminal
echo "Display Manager Status"
sudo systemctl status display-manager.service
echo "System Log Status"
sudo systemctl status syslog.service
  1. 为什么终端出现但没有显示其他命令的结果?
  2. 我手动启动了终端并执行了bash show-services-status.sh它,但是我必须按下键盘上的 q 才能看到下一个命令的结果。如何消除这个问题?谢谢

答案1

  1. 因为所有命令都在执行gnome-terminal命令的同一 shell 中按顺序运行 - 而不是运行里面新的gnome-terminal

  2. 您可以将--no-pager选项添加到systemctl命令中 - 请参阅man systemctl

如果您想在 new 中运行以下命令gnome-terminal,您可以将它们包装在 shell 中并将它们作为命令字符串传递,例如:

gnome-terminal -- sh -c '
  echo "Display Manager Status"
  systemctl --no-pager status display-manager.service
  echo "System Log Status"
  systemctl status syslog.service
'

请注意,我省略了--no-pager最后的systemctl命令以保持终端打开 - 否则它可能会立即关闭,在您有时间读取结果之前。

答案2

你可能想要这个:

gnome-terminal -x bash -c 'echo "Display Manager Status"
systemctl --no-pager -l status display-manager.service 
echo "System Log Status"
systemctl --no-pager -l status syslog.service
read'

按回车键退出终端。

如果使用xfce4-terminal,您可以使用-H之前的选项-x让终端等待,而不需要使用read

相关内容