MOVED TO YUN: Process.runShellCommand - Shell program executed repeatedly

Hi all –

A shell program that I’m executing with runShellCommand(…) seems to run repeatedly, rather than run once.

#include <Process.h>

void setup() {
  Bridge.begin();   // Initialize the Bridge
  Serial.begin(9600);   // Initialize the Serial

  Process p;
 
  p.runShellCommand("/root/shell_example.sh");

  while (p.running());

  while (p.available()) {
  }
  delay(5000);  // wait 5 seconds before you do it again
}

void loop(){}

On the linino, we have this file in /root called shell_example.sh:

#!/bin/sh
INCR=0
while [ 1 ] ; 
    do
        touch test$INCR
        sleep 1
        rm test$INCR
        INCR=$((INCR+1))
    done

This file just creates a file named testi every second, and increments i, e.g. test0, test1, test2, test3, …

When I run the Arduino code, a file named test0 is created every second, in /usr/lib/python2.7/bridge (where bridge.py exists), as if the shell_example.sh was being called every second.

So what’s going on with the runShellComand? Does it repeatedly call the command?

In processes.py in /usr/lib/python2.7/bridge, I’m assuming that command

proc = Popen(cmd, stdout=PIPE, stderr=PIPE, stdin=PIPE)

is being invoked. But opening up python in that directory and running

>>> from subprocess import Popen
>>> Popen('/root/shell_example.sh')
<subprocess.Popen object at 0x77bf05f0>

does the right thing: test0, test1, test2, … get created.

So, I’m assuming that the cmd is being garbled somehow. I tried to write the command to a file by modifying the source of processes.py:

__future__ import print_function

class Processes:
  def __init__(self):
    self.processes = { }
    self.next_id = 0
    
  def create(self, cmd):
    # Start the background process
    try:
      f = open('writing_cmd', 'a')
      print(cmd, file=f)
      f.close()
      proc = Popen(cmd, stdout=PIPE, stderr=PIPE, stdin=PIPE)

But no file was written.

Any ideas why this shell program isn’t being executed correctly?

Hi
the shell script you created runs in an endless loop.
Is that what you wanted?
You should explain what you want to do.

Regards
sys64738