从启动器启动 .sh 文件

从启动器启动 .sh 文件

我对 Ubuntu 14.04 还不太熟悉。我正在做一个学校项目,需要使用导航堆栈。此时导航工作正常。我目前的问题是:
在启动rviz并进行实际导航之前,我必须执行以下命令:

sudo mknod -m 666 /dev/ttyS51 c 4 115  
sudo socat PTY,link=/dev/ttyS51, TCP4:192.168.0.60:10002  
sudo chmod a=r+w /dev/pts/*  

我需要运行一些额外的命令,但我想你们已经明白了。
此时我必须手动将所有这些命令输入到终端中。我已将它们添加到可以手动启动的 shell 文件中。

我想知道是否可以从文件执行此 shell 文件.launch。与从文件内部启动节点的方式相同.launch
如果我可以向现有启动文件添加一段代码,这样当我输入以下命令时,这些命令和导航所需的其余节点就会执行,这将变得容易得多:

roslaunch navigation2d_example move_base.launch

我的shell文件的名字是:mobi_mani.sh 里面的代码是:

#!/bin/sh  
sudo mknod -m 666 /dev/ttyS51 c 4 115  
sudo socat PTY,link=/dev/ttyS51, TCP4:192.168.0.60:10002  
sudo chmod a=r+w /dev/pts/* " 

长话短说。我如何从文件
中执行文件中所述的命令? 此外,我可以在终端屏幕上获得反馈吗?这样我就知道发生了什么。.sh.launch

抱歉我的英语不好,我是荷兰人。
提前谢谢!

答案1

您指的是一个.desktop文件。这些文件可用于运行命令、应用程序等。

文件的最基本版本.desktop

[Desktop Entry]
Name=Some Name
Exec=<command> 
Type=Application

就你的情况而言,你想运行一个系列命令,使用sudo。在这种情况下,您需要:

[Desktop Entry]
Name=Some Name
Exec=/bin/bash -c "command1&&command2&&command3"
Type=Application
Terminal=true

您需要使用扩展名保存文件.desktop,例如run_commands.desktop。要从桌面使用这些文件,请使其可执行。

解释

  • 要在文件中使用复杂的命令.desktop,该Exec=行应如下所示:

    Exec=/bin/bash -c "command1&&command2&&command3"
    
  • 要将.desktop文件中的命令链接起来,就好像每个命令都在脚本的新行上一样,您必须&&在命令之间使用。

  • 如果在命令中使用sudo,则需要设置:

    Terminal=true
    

    因此命令将在终端中运行并要求您输入密码,或者您需要使用gksu而不是sudo,因此gksu将要求您输入密码。在这种情况下,您必须安装gksu,它不是系统默认安装的:

    sudo apt-get install gksu
    

如果命令太复杂或太长而无法在 .desktop 文件中处理

如果您的一系列命令太长,无法在文件中处理.desktop,请像您一样将它们写在一个小脚本中,然后从.desktop文件中调用该脚本。文件Exec=中的行.desktop应如下所示:

Exec=/bin/sh mobi_mani.sh

如果您需要在终端中运行命令,请进行编辑

您还可以使用以下命令从终端运行命令:
在文件中设置.desktopExec=行:

Exec=gnome-terminal -x /bin/bash -c "<command1>&&<command2>&&<command3>"

然后,假设您使用gnome-terminal,转到首选项(gnome-terminal)> 配置文件首选项> 标题和命令,然后从下拉列表中选择“当命令完成时”> 保持终端打开:

在此处输入图片描述

这实际上是不会失败的。

相关内容