1 This file is alias.def
, from which is created alias.c
2 It implements the builtins
"alias" and
"unalias" in Bush.
4 Copyright (C
) 1987-2020 Free Software Foundation
, Inc.
6 This file is part of GNU Bush
, the Bourne Again SHell.
8 Bush is free software
: you can redistribute it and
/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation
, either version
3 of the License
, or
11 (at your option
) any later version.
13 Bush is distributed in the hope that it will be useful
,
14 but WITHOUT ANY WARRANTY
; without even the implied warranty of
15 MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with Bush. If not
, see
<http
://www.gnu.org
/licenses
/>.
22 $FUNCTION alias_builtin
25 $SHORT_DOC alias
[-p
] [name
[=value
] ...
]
26 Define or display aliases.
28 Without arguments
, `alias
' prints the list of aliases in the reusable
29 form `alias NAME=VALUE' on standard output.
31 Otherwise
, an alias is defined for each NAME whose VALUE is given.
32 A trailing space in VALUE causes the next word to be checked for
33 alias substitution when the alias is expanded.
36 -p print all defined aliases in a reusable format
39 alias returns true unless a NAME is supplied for which no alias has been
47 #if
defined (HAVE_UNISTD_H
)
49 # include
<sys
/types.h
>
54 # include
"../src/bushansi.h"
55 # include
"../src/bushintl.h"
58 # include
"../src/shell.h"
59 # include
"../src/alias.h"
61 # include
"bushgetopt.h"
63 /* Flags for print_alias
*/
64 #define AL_REUSABLE
0x01
66 static void print_alias
PARAMS((alias_t
*, int
));
68 /* Hack the alias command in a Korn shell way.
*/
73 int any_failed
, offset
, pflag
, dflags
;
74 alias_t
**alias_list
, *t
;
77 dflags
= posixly_correct ?
0 : AL_REUSABLE
;
79 reset_internal_getopt ();
80 while ((offset
= internal_getopt (list
, "p")) != -1)
86 dflags |
= AL_REUSABLE
;
97 if (list
== 0 || pflag
)
100 return (EXECUTION_SUCCESS
);
102 alias_list
= all_aliases ();
105 return (EXECUTION_SUCCESS
);
107 for (offset
= 0; alias_list
[offset
]; offset
++)
108 print_alias (alias_list
[offset
], dflags
);
110 free (alias_list
); /* XXX
- Do not free the strings.
*/
113 return (sh_chkwrite (EXECUTION_SUCCESS
));
119 name
= list
->word
->word
;
121 for (offset
= 0; name
[offset
] && name
[offset
] != '='; offset
++)
124 if (offset
&& name
[offset
] == '=')
127 value
= name
+ offset
+ 1;
129 if (legal_alias_name (name
, 0) == 0)
131 builtin_error (_("`%s': invalid alias name"), name
);
135 add_alias (name
, value
);
139 t
= find_alias (name
);
141 print_alias (t
, dflags
);
151 return (any_failed ? EXECUTION_FAILURE
: EXECUTION_SUCCESS
);
156 $FUNCTION unalias_builtin
158 $SHORT_DOC unalias
[-a
] name
[name ...
]
159 Remove each NAME from the list of defined aliases.
162 -a remove all alias definitions
164 Return success unless a NAME is not an existing alias.
168 /* Remove aliases named in LIST from the aliases database.
*/
170 unalias_builtin (list
)
171 register WORD_LIST
*list
;
173 register alias_t
*alias
;
177 reset_internal_getopt ();
178 while ((opt
= internal_getopt (list
, "a")) != -1)
196 delete_all_aliases ();
197 return (EXECUTION_SUCCESS
);
209 alias
= find_alias (list
->word
->word
);
212 remove_alias (alias
->name
);
215 sh_notfound (list
->word
->word
);
222 return (aflag ? EXECUTION_FAILURE
: EXECUTION_SUCCESS
);
225 /* Output ALIAS in such a way as to allow it to be read back in.
*/
227 print_alias (alias
, flags
)
233 value
= sh_single_quote (alias
->value
);
234 if (flags
& AL_REUSABLE
)
235 printf ("alias %s", (alias
->name
&& alias
->name
[0] == '-') ?
"-- " : "");
236 printf ("%s=%s\n", alias
->name
, value
);