Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe@cygwin.com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin@cygwin.com>
List-Help: <mailto:cygwin-help@cygwin.com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner@cygwin.com
Mail-Followup-To: cygwin@cygwin.com
Delivered-To: mailing list cygwin@cygwin.com
Date: Wed, 10 Aug 2005 15:40:24 -0400
From: Christopher Faylor <cgf-no-personal-reply-please@cygwin.com>
To: cygwin@cygwin.com
Subject: Re: Programatically finding value of "cygdrive" prefix
Message-ID: <20050810194024.GC6294@trixie.casa.cgf.cx>
Reply-To: cygwin@cygwin.com
References: <42FA4604.8000507@tlinx.org> <20050810183616.GA5892@trixie.casa.cgf.cx> <20050810184119.GA6155@trixie.casa.cgf.cx> <42FA4EC2.3000504@alltel.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <42FA4EC2.3000504@alltel.net>
User-Agent: Mutt/1.5.8i

On Wed, Aug 10, 2005 at 02:00:18PM -0500, Ken Dibble wrote:
>Christopher Faylor wrote:
>
>>On Wed, Aug 10, 2005 at 02:36:16PM -0400, Christopher Faylor wrote:
>> 
>>
>>>On Wed, Aug 10, 2005 at 11:23:00AM -0700, Linda W wrote:
>>>   
>>>
>>>>Is there a way to find out in a bash script the cygdrive prefix?
>>>>I thought something simple like
>>>> mount -p|tail -1|cut -f1
>>>>but that incorrectly assumed the fields were tab delimited.
>>>>Since there can be spaces in the cygdrive prefix, I can't
>>>>use space a delimiter, example:
>>>># mount -p
>>>>Prefix              Type         Flags
>>>>/cyg drive posix path  system       binmode
>>>>----
>>>>     
>>>>
>>>There may be a simpler way to do it, but this seems to work:
>>>
>>>mount -p | sed -n '2s/\([^ ]\)  *[^ ][^ ]*  *[^ ][^ ]*$/\1/p'
>>>   
>>>
>>
>>This is shorter:
>>
>>mount -p | sed -nr '2s/([^ ]) +\S+ +\S+$/\1/p'
>>
>Or you can do it the long, slow wasteful way, which us dullards are required
>to use, so we can figure out why it broke yet again.
>
>#!/bin/bash
>let c=0;
># get the number of fields
>for i in `mount -p | tail -1`; do let c=$c+1; done
>
># if number of fields is greater than 3 because mount point has a space, 
>add them
>CUT_FIELDS="--fields=1"
>let i=3;
>while [ $i -lt $c ]
>do
>CUT_FIELDS=$CUT_FIELDS,$i
>let i=$i+1
>done
>
># get the fields
>mount -p | tail -1 | /usr/bin/cut --delimiter=" " $CUT_FIELDS

Personally, if something breaks, I'd rather look at one line than
eighteen.  I can't imagine why anyone would find the above an acceptable
solution when it's possible to do it all with one line.  And, the above
doesn't handle imbedded spaces.

Btw, a further simplification:

mount -p | sed -nr '2s/(\S) +\S+ +\S+$/\1/p'

cgf

--
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/

