【问题标题】:Writing a Script to execute commands?编写脚本来执行命令?
【发布时间】:2015-02-18 17:08:15
【问题描述】:

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

cd home/pi/PiBits/ServoBlaster/user
sudo ./servod

第二个:

cd ~/scratchClient
python crs/scratchClient.py -c servoblaster

我该怎么做?我读了一些关于将xterm -e 等放在它前面的东西,但这些都不适合我...... 顺便说一句,这将在 Raspbian Linux 上使用。 编辑,这对我有用:
链接:ubuntuforums.org/showthread.php?t=1336228 使用的行:gnome-terminal --execute bash -c "/path/scriptname ; bash"

【问题讨论】:

    标签: linux bash shell executable


    【解决方案1】:

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

    #!/bin/sh

    这会导致使用 bourne shell 来解释脚本,这(可能)与您在终端中运行的解释器相同。然后你应该让脚本可执行chmod +x <script>

    【讨论】:

    • /bin/sh 是 POSIX sh,而不是 bash;因此,将其描述为“Bourne (Again) Shell”是不恰当的。即使/bin/sh/bin/bash 的符号链接,它也会禁用与POSIX 兼容的功能。
    • 另外,如果 OP 的问题与 sudo 在标准输入未连接到终端时拒绝工作有关,我不会感到惊讶(默认情况下;可通过 /etc/sudoers 配置) .
    • Sudo 会是个问题,是的。我总是在根终端中运行这两个,所以我不必输入它。 Servoblaster 肯定需要 sudo,我不知道 python 脚本。
    【解决方案2】:

    试试这个。

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

    xterm -hold -e 'cd /home/pi/scratchClient
        python crs/scratchClient.py -c servoblaster' &
    

    如果它不起作用,也许你应该解释它以什么方式失败。如果可行,您可以在前面添加一个 shebang,将它们保存在文件中,chmod +x 那些文件,然后点击您的心脏内容(或者可能获得更复杂的品味,您只需将这些作为后台作业运行,而无需任何 @987654324 @ 或其他焦虑的 GUI)。

    【讨论】:

    • 我会尝试一下,我会告诉你的。获得更精致的品味?大声笑。我需要它们可见的原因是因为目前,它都有很多错误。 Scratchclient 往往会经常崩溃,甚至完全与从头和伺服冲击器断开连接。当其中一个事件发生时,它会在活动终端中通知我。它对调试有很大帮助,看看它是从零开始崩溃的,或者伺服冲击器得到了无效的尺寸,等等。
    • 它运行,但立即关闭。没有错误,让我假设它在后台运行。我将如何保持会话开放?我是点击Execute还是Execute in Terminal
    • 我是把它命名为name 还是name.sh
    • 我添加了-hold,这似乎有效......我想我可能会坚持下去。
    • 大问题,Scratchclient 没有检测到 Servoblaster 正在运行。会不会是servoblaster 脚本实际上并没有正常运行?
    【解决方案3】:

    解决方案是使用 gnome-terminal... 发现 an UbuntuForums post 有类似的问题,例如我的。

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

    【讨论】:

    • 请链接?尝试帮助未来的访问者解决同样的问题。
    • 链接:ubuntuforums.org/showthread.php?t=1336228 使用的行:gnome-terminal --execute bash -c "/path/scriptname ; bash"
    • 请编辑您的答案以包含此信息,并接受该答案,以便此问题不再出现未解决。谢谢。
    • 呃,我还没有弄清楚最后一点怎么做......:!
    • The edit link 就在您的答案下方。然后单击左侧的大友好复选标记,使其填充而不是空心。详情请见help
    猜你喜欢
    • 2013-05-13
    • 2014-12-04
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2012-12-05
    相关资源
    最近更新 更多