![从启动器启动 .sh 文件](https://linux22.com/image/980941/%E4%BB%8E%E5%90%AF%E5%8A%A8%E5%99%A8%E5%90%AF%E5%8A%A8%20.sh%20%E6%96%87%E4%BB%B6.png)
我对 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
如果您需要在终端中运行命令,请进行编辑
您还可以使用以下命令从终端运行命令:
在文件中设置.desktop
为Exec=
行:
Exec=gnome-terminal -x /bin/bash -c "<command1>&&<command2>&&<command3>"
然后,假设您使用gnome-terminal
,转到首选项(gnome-terminal)> 配置文件首选项> 标题和命令,然后从下拉列表中选择“当命令完成时”> 保持终端打开:
这实际上是不会失败的。