Ejemplo n.º 1
0
 def test_redirection(self):
     self.assertEqual(self.parse('echo hello > c'),
                      Pipeline([Command(['echo', 'hello'], 
                                        [((('>'),), 'c')])], False))
     self.assertEqual(self.parse('echo hello > c >> d'),
                      Pipeline([Command(['echo', 'hello'], [(('>',), 'c'),
                                                  (('>>',), 'd')])], False))
     self.assertEqual(self.parse('a 2>&1'),
                      Pipeline([Command(['a'], [(('>&',2), '1')])], False))
Ejemplo n.º 2
0
 def test_basic(self):
     self.assertEqual(self.parse('echo hello'),
                      Pipeline([Command(['echo', 'hello'], [])], False))
     self.assertEqual(self.parse('echo ""'),
                      Pipeline([Command(['echo', ''], [])], False))
     self.assertEqual(self.parse("""echo -DFOO='a'"""),
                      Pipeline([Command(['echo', '-DFOO=a'], [])], False))
     self.assertEqual(self.parse('echo -DFOO="a"'),
                      Pipeline([Command(['echo', '-DFOO=a'], [])], False))
Ejemplo n.º 3
0
 def test_basic(self):
     self.assertEqual(self.parse('echo hello'),
                      (False, False,
                       Pipeline([Command(['echo', 'hello'], [])],
                                False, True)))
     self.assertEqual(self.parse('echo hello | grep hello'),
                      (False, False,
                       Pipeline([Command(['echo', 'hello'], []),
                                 Command(['grep', 'hello'], [])],
                                False, True)))
Ejemplo n.º 4
0
    def test_pipeline(self):
        self.assertEqual(
            self.parse('a | b'),
            Pipeline(
                [Command(['a'], []), Command(['b'], [])], False))

        self.assertEqual(
            self.parse('a | b | c'),
            Pipeline(
                [Command(['a'], []),
                 Command(['b'], []),
                 Command(['c'], [])], False))
Ejemplo n.º 5
0
    def parse_pipeline(self):
        if self.look() is None:
            raise ValueError,"Expected at least one argument to exec"

        commands = [Command([],[])]
        while 1:
            arg = self.lex()
            if arg is None:
                break
            elif arg == '|':
                commands.append(Command([],[]))
            elif arg == '|&':
                # Write this as a redirect of stderr; it must come first because
                # stdout may have already been redirected.
                commands[-1].redirects.insert(0, (('>&',2),'1'))
                commands.append(Command([],[]))
            elif arg[:4] in TclExecCommand.kRedirectPrefixes4:
                commands[-1].redirects.append(self.parse_redirect(arg, 4))
            elif arg[:3] in TclExecCommand.kRedirectPrefixes3:
                commands[-1].redirects.append(self.parse_redirect(arg, 3))
            elif arg[:2] in TclExecCommand.kRedirectPrefixes2:
                commands[-1].redirects.append(self.parse_redirect(arg, 2))
            elif arg[:1] in TclExecCommand.kRedirectPrefixes1:
                commands[-1].redirects.append(self.parse_redirect(arg, 1))
            else:
                commands[-1].args.append(arg)

        return Pipeline(commands, False, pipe_err=True)
Ejemplo n.º 6
0
    def parse_pipeline(self):
        negate = False

        commands = [self.parse_command()]
        while self.look() == ('|', ):
            self.lex()
            commands.append(self.parse_command())
        return Pipeline(commands, negate, self.pipefail)
Ejemplo n.º 7
0
 def test_redirect(self):
     self.assertEqual(self.parse('echo hello > a >b >>c 2> d |& e'),
                      (False, False,
                       Pipeline([Command(['echo', 'hello'],
                                         [(('>&',2),'1'),
                                          (('>',),'a'),
                                          (('>',),'b'),
                                          (('>>',),'c'),
                                          (('>',2),'d')]),
                                 Command(['e'], [])],
                                False, True)))
Ejemplo n.º 8
0
    def test_list(self):
        self.assertEqual(
            self.parse('a ; b'),
            Seq(Pipeline([Command(['a'], [])], False), ';',
                Pipeline([Command(['b'], [])], False)))

        self.assertEqual(
            self.parse('a & b'),
            Seq(Pipeline([Command(['a'], [])], False), '&',
                Pipeline([Command(['b'], [])], False)))

        self.assertEqual(
            self.parse('a && b'),
            Seq(Pipeline([Command(['a'], [])], False), '&&',
                Pipeline([Command(['b'], [])], False)))

        self.assertEqual(
            self.parse('a || b'),
            Seq(Pipeline([Command(['a'], [])], False), '||',
                Pipeline([Command(['b'], [])], False)))

        self.assertEqual(
            self.parse('a && b || c'),
            Seq(
                Seq(Pipeline([Command(['a'], [])], False), '&&',
                    Pipeline([Command(['b'], [])], False)), '||',
                Pipeline([Command(['c'], [])], False)))

        self.assertEqual(
            self.parse('a; b'),
            Seq(Pipeline([Command(['a'], [])], False), ';',
                Pipeline([Command(['b'], [])], False)))
Ejemplo n.º 9
0
 def test_basic(self):
     self.assertEqual(self.parse('echo hello'),
                      Pipeline([Command(['echo', 'hello'], [])], False))
     self.assertEqual(self.parse('echo ""'),
                      Pipeline([Command(['echo', ''], [])], False))