Exemple #1
0
  def Run(self, cmd_val):
    # type: (cmd_value__Assign) -> int
    arg_r = args.Reader(cmd_val.argv, spids=cmd_val.arg_spids)
    arg_r.Next()
    attrs = flag_spec.Parse('readonly', arg_r)
    arg = arg_types.readonly(attrs.attrs)

    if arg.p or len(cmd_val.pairs) == 0:
      return _PrintVariables(self.mem, cmd_val, attrs, True, builtin=_READONLY)

    for pair in cmd_val.pairs:
      if pair.rval is None:
        if arg.a:
          rval = value.MaybeStrArray([])  # type: value_t
        elif arg.A:
          rval = value.AssocArray({})
        else:
          rval = None
      else:
        rval = pair.rval

      rval = _ReconcileTypes(rval, arg.a, arg.A, pair.spid)

      # NOTE:
      # - when rval is None, only flags are changed
      # - dynamic scope because flags on locals can be changed, etc.
      state.SetLocalShopt(self.mem, lvalue.Named(pair.var_name), rval,
                          flags=state.SetReadOnly)

    return 0
Exemple #2
0
  def Run(self, cmd_val):
    # type: (cmd_value__Assign) -> int
    arg_r = args.Reader(cmd_val.argv, spids=cmd_val.arg_spids)
    arg_r.Next()
    attrs = flag_spec.Parse('export_', arg_r)
    arg = arg_types.export_(attrs.attrs)
    #arg = attrs

    if arg.f:
      e_usage(
          "doesn't accept -f because it's dangerous.  "
          "(The code can usually be restructured with 'source')")

    if arg.p or len(cmd_val.pairs) == 0:
      return _PrintVariables(self.mem, cmd_val, attrs, True, builtin=_EXPORT)


    if arg.n:
      for pair in cmd_val.pairs:
        if pair.rval is not None:
          e_usage("doesn't accept RHS with -n", span_id=pair.spid)

        # NOTE: we don't care if it wasn't found, like bash.
        self.mem.ClearFlag(pair.var_name, state.ClearExport)
    else:
      for pair in cmd_val.pairs:
        # NOTE: when rval is None, only flags are changed
        state.SetLocalShopt(self.mem, lvalue.Named(pair.var_name), pair.rval,
                            flags=state.SetExport)

    return 0
Exemple #3
0
 def _WriteFdToMem(self, fd_name, fd):
     # type: (str, int) -> None
     if self.mem:
         # setvar, not setref
         state.SetLocalShopt(self.mem, lvalue.Named(fd_name),
                             value.Str(str(fd)))
Exemple #4
0
 def _Store(self, lval, new_int):
     # type: (lvalue_t, int) -> None
     val = value.Str(str(new_int))
     state.SetLocalShopt(self.mem, lval, val)