(command.CommandList children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_Pound '$#'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (2))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:55) ) ] action: [ (command.Subshell command_list: (command.CommandList children: [ (C {(echo)} { (DQ ('\n') ('Usage: ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:68) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (' <size> <path>\n') ('\n') ('Truncate the <path> to exactly <size> bytes.\n') ('\n') ("If <path> doesn't exist it is created.\n") ('\n') ('<size> is a number which may be optionally followed\n') ('by the following multiplicative suffixes:\n') (' b 512\n') (' KB 1000\n') (' K 1024\n') (' MB 1000*1000\n') (' M 1024*1024\n') ('and so on for G, T, P, E, Z, Y\n') ('\n') ('If the file previously was larger than this size, the extra data is\n') ('lost. If the file previously was shorter, it is extended\n') ('and the extended part reads as zero bytes. Note in both cases\n') ('no data is written (if the filesystem supports holes in files).\n') ('\n') ('E.G.: truncate 2TB ext3.test\n') ) } ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:101) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:105) arg_word: {(1)} ) ] spids: [39 57] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:size) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [112] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:file) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [115] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:error) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:122) command_list: (command.CommandList children: [ (command.Simple words: [ {(dd)} {(Id.Lit_VarLike 'bs=') (1)} {(Id.Lit_VarLike 'seek=') ($ Id.VSub_DollarName '$size')} {(Id.Lit_VarLike 'if=') (/dev/null)} {(Id.Lit_VarLike 'of=') (DQ ($ Id.VSub_DollarName '$file'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:141) fd: 2 arg_word: {(1)} ) ] ) ] ) ) } spids: [121] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ret) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [145] ) ] ) (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$error'))}) (command.Simple words: [{(grep)} {(-v)} {(DQ ('^0'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:164) fd: -1 arg_word: {(2)} ) ] ) ] negated: F ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:167) arg_word: {($ Id.VSub_DollarName '$ret')} ) ] )