Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com X-Authentication-Warning: slinky.cs.nyu.edu: pechtcha owned process doing -bs Date: Mon, 12 May 2003 13:58:48 -0400 (EDT) From: Igor Pechtchanski Reply-To: cygwin AT cygwin DOT com To: Bernard Kash cc: cygwin AT cygwin DOT com Subject: Re: suggestion for cygutils - usermod (was Re: howto change home path in /etc/passwd) In-Reply-To: Message-ID: Importance: Normal MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Mon, 12 May 2003, Bernard Kash wrote: > "Igor Pechtchanski" wrote in message > news:... > > On Mon, 12 May 2003 Sylvain DOT Ferriol AT imag DOT fr wrote: > > > > > Surlignage Max Bowsher : > > > > > > > Sylvain DOT Ferriol AT imag DOT fr wrote: > > > > > Yes , because i don't want to create a shell doing this: grep -v > > > > > $USERNAME /etc/passwd > /etc/passwd > > > > > > > sorry > > > but i don't know with sed how to delete a line starting with $USER > > > > For the record: "sed '/'$USER':/d". However, grep is perfectly > > adequate. What Max was warning you about was the shell redirection > > mechanism. You'd be safer using something like > > > > cp -p /etc/passwd /etc/passwd-bak-tmp && grep -v $USERNAME > /etc/passwd-bak-tmp > /etc/passwd && rm -f /etc/passwd-bak-tmp > > Unfortunately, if you have a user named Homer that uses > 'home' as his userid, the grep will eliminate more users > than you might expect. A more realistic example might be > two users 'ted' and 'ed' when modifying user 'ed'. Umm, yes, you're quite right. I was addressing the redirection comment, but should have noticed this as well. Ok, here we go. You can use either of the below: (1) grep -v "^$USER:" (2) sed '/^'"$USER"':/d' (3) sed 's/^'"$USER"':.*$//' (4) awk -F: '$1!="'"$USER"'"{print}' (5) perl -pe 's/^'"$USER"':.*$//' ... Well, you get the drift... (1), (3), (4), and (5) can be used in a case-insensitive manner (how is left as an exercise for the reader). ;-) Igor > Also, the mkuser -p option expects a base directory, > so if $HOME is "/home/usrname" the resulting record > will set HOME to "/home/username/username" > > I've used awk delete a user from passwd... > > awk -F: -v usr=$USERNAME '{IGNORECASE=1; if($1 != usr) print $1;}' > /etc/passwd > > BB > > > > > Care! That will leave you with an empty /etc/passwd. > > > > The shell truncates /etc/passwd BEFORE grep reads it. > > > > > > > > > mkpasswd -l -u $USERNAME -p $HOME >> /etc/passwd -- http://cs.nyu.edu/~pechtcha/ |\ _,,,---,,_ pechtcha AT cs DOT nyu DOT edu ZZZzz /,`.-'`' -. ;-;;,_ igor AT watson DOT ibm DOT com |,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski '---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow! Knowledge is an unending adventure at the edge of uncertainty. -- Leto II -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/