source: vendor/bash/3.1/builtins/alias.def

Last change on this file was 3228, checked in by bird, 18 years ago

bash 3.1

File size: 4.8 KB
Line 
1This file is alias.def, from which is created alias.c
2It implements the builtins "alias" and "unalias" in Bash.
3
4Copyright (C) 1987-2004 Free Software Foundation, Inc.
5
6This file is part of GNU Bash, the Bourne Again SHell.
7
8Bash is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
10Software Foundation; either version 2, or (at your option) any later
11version.
12
13Bash is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16for more details.
17
18You should have received a copy of the GNU General Public License along
19with Bash; see the file COPYING. If not, write to the Free Software
20Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
21
22$BUILTIN alias
23$FUNCTION alias_builtin
24$DEPENDS_ON ALIAS
25$PRODUCES alias.c
26$SHORT_DOC alias [-p] [name[=value] ... ]
27`alias' with no arguments or with the -p option prints the list
28of aliases in the form alias NAME=VALUE on standard output.
29Otherwise, an alias is defined for each NAME whose VALUE is given.
30A trailing space in VALUE causes the next word to be checked for
31alias substitution when the alias is expanded. Alias returns
32true unless a NAME is given for which no alias has been defined.
33$END
34
35#include <config.h>
36
37#if defined (ALIAS)
38
39#if defined (HAVE_UNISTD_H)
40# ifdef _MINIX
41# include <sys/types.h>
42# endif
43# include <unistd.h>
44#endif
45
46# include "../bashansi.h"
47# include "../bashintl.h"
48
49# include <stdio.h>
50# include "../shell.h"
51# include "../alias.h"
52# include "common.h"
53# include "bashgetopt.h"
54
55/* Flags for print_alias */
56#define AL_REUSABLE 0x01
57
58static void print_alias __P((alias_t *, int));
59
60extern int posixly_correct;
61
62/* Hack the alias command in a Korn shell way. */
63int
64alias_builtin (list)
65 WORD_LIST *list;
66{
67 int any_failed, offset, pflag, dflags;
68 alias_t **alias_list, *t;
69 char *name, *value;
70
71 dflags = posixly_correct ? 0 : AL_REUSABLE;
72 pflag = 0;
73 reset_internal_getopt ();
74 while ((offset = internal_getopt (list, "p")) != -1)
75 {
76 switch (offset)
77 {
78 case 'p':
79 pflag = 1;
80 dflags |= AL_REUSABLE;
81 break;
82 default:
83 builtin_usage ();
84 return (EX_USAGE);
85 }
86 }
87
88 list = loptend;
89
90 if (list == 0 || pflag)
91 {
92 if (aliases == 0)
93 return (EXECUTION_SUCCESS);
94
95 alias_list = all_aliases ();
96
97 if (alias_list == 0)
98 return (EXECUTION_SUCCESS);
99
100 for (offset = 0; alias_list[offset]; offset++)
101 print_alias (alias_list[offset], dflags);
102
103 free (alias_list); /* XXX - Do not free the strings. */
104
105 if (list == 0)
106 return (EXECUTION_SUCCESS);
107 }
108
109 any_failed = 0;
110 while (list)
111 {
112 name = list->word->word;
113
114 for (offset = 0; name[offset] && name[offset] != '='; offset++)
115 ;
116
117 if (offset && name[offset] == '=')
118 {
119 name[offset] = '\0';
120 value = name + offset + 1;
121
122 if (legal_alias_name (name, 0) == 0)
123 {
124 builtin_error (_("`%s': invalid alias name"), name);
125 any_failed++;
126 }
127 else
128 add_alias (name, value);
129 }
130 else
131 {
132 t = find_alias (name);
133 if (t)
134 print_alias (t, dflags);
135 else
136 {
137 sh_notfound (name);
138 any_failed++;
139 }
140 }
141 list = list->next;
142 }
143
144 return (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
145}
146#endif /* ALIAS */
147
148$BUILTIN unalias
149$FUNCTION unalias_builtin
150$DEPENDS_ON ALIAS
151$SHORT_DOC unalias [-a] name [name ...]
152Remove NAMEs from the list of defined aliases. If the -a option is given,
153then remove all alias definitions.
154$END
155
156#if defined (ALIAS)
157/* Remove aliases named in LIST from the aliases database. */
158int
159unalias_builtin (list)
160 register WORD_LIST *list;
161{
162 register alias_t *alias;
163 int opt, aflag;
164
165 aflag = 0;
166 reset_internal_getopt ();
167 while ((opt = internal_getopt (list, "a")) != -1)
168 {
169 switch (opt)
170 {
171 case 'a':
172 aflag = 1;
173 break;
174 default:
175 builtin_usage ();
176 return (EX_USAGE);
177 }
178 }
179
180 list = loptend;
181
182 if (aflag)
183 {
184 delete_all_aliases ();
185 return (EXECUTION_SUCCESS);
186 }
187
188 if (list == 0)
189 {
190 builtin_usage ();
191 return (EX_USAGE);
192 }
193
194 aflag = 0;
195 while (list)
196 {
197 alias = find_alias (list->word->word);
198
199 if (alias)
200 remove_alias (alias->name);
201 else
202 {
203 sh_notfound (list->word->word);
204 aflag++;
205 }
206
207 list = list->next;
208 }
209
210 return (aflag ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
211}
212
213/* Output ALIAS in such a way as to allow it to be read back in. */
214static void
215print_alias (alias, flags)
216 alias_t *alias;
217 int flags;
218{
219 char *value;
220
221 value = sh_single_quote (alias->value);
222 if (flags & AL_REUSABLE)
223 printf ("alias ");
224 printf ("%s=%s\n", alias->name, value);
225 free (value);
226
227 fflush (stdout);
228}
229#endif /* ALIAS */
Note: See TracBrowser for help on using the repository browser.