Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 编写脚本以执行命令?_Linux_Bash_Shell_Executable - Fatal编程技术网

Linux 编写脚本以执行命令?

Linux 编写脚本以执行命令?,linux,bash,shell,executable,Linux,Bash,Shell,Executable,我从来没有写过剧本,所以请容忍我。我需要做的是,制作两个脚本,我可以在桌面上单击,它们都将打开自己的终端(并保持打开状态,直到我手动关闭它),然后运行给定的行。 对于第一个,我必须手动运行以下命令: cd home/pi/PiBits/ServoBlaster/user sudo ./servod 第二项: cd ~/scratchClient python crs/scratchClient.py -c servoblaster 我该怎么做?我读了一些关于在它前面放xterm-e之类的东西

我从来没有写过剧本,所以请容忍我。我需要做的是,制作两个脚本,我可以在桌面上单击,它们都将打开自己的终端(并保持打开状态,直到我手动关闭它),然后运行给定的行。 对于第一个,我必须手动运行以下命令:

cd home/pi/PiBits/ServoBlaster/user
sudo ./servod
第二项:

cd ~/scratchClient
python crs/scratchClient.py -c servoblaster
我该怎么做?我读了一些关于在它前面放
xterm-e
之类的东西,但这些都不适合我。。。 顺便说一下,这将在RaspbianLinux上使用。 编辑,这对我有用:

Link:ubuntuforums.org/showthread.php?t=1336228使用的行:gnome terminal
--execute bash-c”/path/scriptname;bash“

您只需要添加一个shebang,这意味着将它放在脚本的第一行:

#/bin/sh

这会导致使用bourne shell来解释脚本,这(可能)是在终端中运行的同一个解释器。然后您应该使脚本可执行
chmod+x

试试这个

xterm -hold -e 'cd /home/pi/PiBits/ServoBlaster/user
    sudo ./servod' &


如果它不起作用,也许你应该解释一下它是以什么方式失败的。如果它有效,你可以在前面添加一个shebang,将它们保存在文件中,
chmod+x
这些文件,然后点击进入你的心底(或者获得一种更复杂的体验,你只需在没有任何
xterm
或其他焦虑的GUI的情况下作为后台作业运行它们)。

解决方案是使用gnome终端。。。与我的问题类似

gnome-terminal --execute bash -c "/path/scriptname ; bash"

/bin/sh
是POSIX-sh,而不是bash;因此,将其描述为“伯恩(又一次)壳”是不恰当的。即使
/bin/sh
/bin/bash
的符号链接,它也会禁用POSIX兼容性功能。此外,如果OP的问题与
sudo
在stdin未连接到终端时拒绝工作(默认情况下,可通过
/etc/sudoers
配置)有关,我也不会感到惊讶。sudo将是一个问题,对我总是在根终端中运行这两个,所以我不必输入它。Servoblaster肯定需要sudo,我不知道python脚本。我会尝试一下,然后告诉你。获得更复杂的品味?哈哈。我之所以需要它们可见,是因为目前,它们都相当多。Scratchclient经常崩溃,甚至与scratch和servoblaster完全断开连接。当其中一个事件发生时,它会在活动终端中通知我。它对调试有很大帮助,可以看到是ScratchClient崩溃了,或者servoblaster得到了无效的维度,等等。它运行,但立即关闭。没有错误,让我假设它在后台运行。我如何保持会议的开放性?我是否要在终端中单击
Execute
Execute
?我是否要将其命名为
name
name.sh
?我添加了
-hold
,这似乎很有效。。。我想我可能会坚持这一点。大问题是,Scratchclient没有检测到Servoblaster正在运行。可能是servoblaster脚本没有正确运行吗?请链接?尝试帮助未来的访问者解决同样的问题。链接:使用的行:
gnome terminal--execute bash-c”/path/scriptname;bash“
请编辑您的答案以包含此信息,并接受答案,这样这个问题就不会再出现未解决的情况。谢谢。嗯,我还没弄明白最后一点该怎么做…:!就在你的答案下面。然后单击左侧的大友好复选标记,使其填充而不是空心。有关详细信息,请参阅。
gnome-terminal --execute bash -c "/path/scriptname ; bash"