<br><br><div class="gmail_quote">On Thu, May 8, 2008 at 6:42 PM, JK &lt;<a href="mailto:jknapka@kneuro.net" target="_blank">jknapka@kneuro.net</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div>J. D. wrote:<br>
&gt; Is the desired effect for it to expand to /home/callinguser/user?<br>
<br>
</div>No, the desired effect is for it to expand to the home<br>
directory of the user name supplied to the script as<br>
arg $1. &nbsp;So if I say:<br>
</blockquote><div><br><br>Oh OK that makes sense. If root is running the script though, isn&#39;t the tilde <br>most always going to return the home directory of the calling user root?<br><br>Using sudo to get the home directory of the target user might be an option.<br>
<br>USERHOME=`sudo -u joe pwd` <br><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
./myscript joe<br>
I need a way within myscript to refer to &quot;joe&quot;&#39;s home, which on<br>
my system happens to be /home/joe. &nbsp;I cannot make any such<br>
assumptions about the target system, though (that user home<br>
directories live under /home, I mean). &nbsp;Which is why I<br>
want to use the tilde.<br>
<br>
-- JK<br>
<div><br>
&gt; Usually the tilda should expand to /home/user right? I&#39;m not sure why<br>
&gt; you are using the tilda. $USER is a bash builtin but I guess there is no<br>
&gt; harm in resetting it.<br>
&gt;<br>
&gt; for me this works:<br>
&gt;<br>
&gt; #!/bin/bash<br>
&gt;<br>
&gt; USER=$1<br>
&gt; cp foo /home/$USER<br>
&gt; chown $USER /home/$USER/foo<br>
&gt;<br>
&gt;<br>
&gt; On Thu, May 8, 2008 at 3:38 PM, JK &lt;<a href="mailto:jknapka@kneuro.net" target="_blank">jknapka@kneuro.net</a><br>
</div><div><div></div><div>&gt; &lt;mailto:<a href="mailto:jknapka@kneuro.net" target="_blank">jknapka@kneuro.net</a>&gt;&gt; wrote:<br>
&gt;<br>
&gt; &nbsp; &nbsp; Hi folks,<br>
&gt;<br>
&gt; &nbsp; &nbsp; I am trying to do a very simple thing, and getting screwed by bash&#39;s<br>
&gt; &nbsp; &nbsp; evaluation<br>
&gt; &nbsp; &nbsp; rules. &nbsp;Basically, I need to write a script that accepts a user name,<br>
&gt; &nbsp; &nbsp; and then<br>
&gt; &nbsp; &nbsp; copies some files to that user&#39;s home dir, and also chowns them to that<br>
&gt; &nbsp; &nbsp; user.<br>
&gt; &nbsp; &nbsp; So I tried the obvious:<br>
&gt;<br>
&gt; &nbsp; &nbsp; #!/bin/bash<br>
&gt; &nbsp; &nbsp; USER=$1<br>
&gt; &nbsp; &nbsp; cp foo &nbsp;~$USER<br>
&gt; &nbsp; &nbsp; chown $USER ~$USER/foo<br>
&gt;<br>
&gt; &nbsp; &nbsp; This totally fails to work as I expect, because tilde expansion happens<br>
&gt; &nbsp; &nbsp; before variable expansion. &nbsp;So if I supply &#39;joe&#39; as the first arg,<br>
&gt; &nbsp; &nbsp; &quot;~$USER&quot;<br>
&gt; &nbsp; &nbsp; expands to ~joe (instead of the desired /home/joe), and the cp<br>
&gt; &nbsp; &nbsp; effectively<br>
&gt; &nbsp; &nbsp; evaluates to &quot;cp foo &#39;~joe&#39;&quot;, which ends up creating a regular file<br>
&gt; &nbsp; &nbsp; named<br>
&gt; &nbsp; &nbsp; ./~joe<br>
&gt;<br>
&gt; &nbsp; &nbsp; Is there a clean workaround? &nbsp;I&#39;d rather not force the user to<br>
&gt; &nbsp; &nbsp; supply both<br>
&gt; &nbsp; &nbsp; the user name and the user&#39;s home directory as script arguments. &nbsp;And<br>
&gt; &nbsp; &nbsp; doing a grep&#39;n&#39;cut on /etc/passwd is not too appealing either. &nbsp;I&#39;ve<br>
&gt; &nbsp; &nbsp; checked<br>
&gt; &nbsp; &nbsp; a couple of books (&quot;bash Cookbook&quot;, &quot;Linux Shell Scripting&quot;, and an<br>
&gt; &nbsp; &nbsp; online tutorial or two), but the most any of them say is &quot;Don&#39;t do<br>
&gt; &nbsp; &nbsp; that&quot;;<br>
&gt; &nbsp; &nbsp; they provide no workaround.<br>
&gt;<br>
&gt; &nbsp; &nbsp; An explicit command to force shell expansion of an arbitrary string<br>
&gt; &nbsp; &nbsp; would<br>
&gt; &nbsp; &nbsp; do the trick... I&#39;m goofing around with echo and eval right now, with<br>
&gt; &nbsp; &nbsp; interesting, but not useful, results...<br>
&gt;<br>
&gt; &nbsp; &nbsp; Oops, just stumbled on an answer:<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp;cp foo $(eval echo $(echo ~$USER))<br>
&gt;<br>
&gt; &nbsp; &nbsp; works, although it makes my eyes water a bit. &nbsp;Is there a better way?<br>
&gt; &nbsp; &nbsp; (This post has devolved to the &quot;Linux trivia quiz&quot; level...)<br>
&gt;<br>
&gt; &nbsp; &nbsp; Thanks,<br>
&gt;<br>
&gt; &nbsp; &nbsp; -- Joe<br>
&gt;<br>
&gt; &nbsp; &nbsp; --<br>
&gt; &nbsp; &nbsp; I do not particularly want to go where the money is -<br>
&gt; &nbsp; &nbsp; &nbsp;it usually does not smell nice there. -- A. Stepanov<br>
&gt;<br>
&gt;<br>
&gt; &nbsp; &nbsp; _______________________________________________<br>
&gt; &nbsp; &nbsp; Ale mailing list<br>
</div></div>&gt; &nbsp; &nbsp; <a href="mailto:Ale@ale.org" target="_blank">Ale@ale.org</a> &lt;mailto:<a href="mailto:Ale@ale.org" target="_blank">Ale@ale.org</a>&gt;<br>
<div>&gt; &nbsp; &nbsp; <a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
</div>&gt; ------------------------------------------------------------------------<br>
<div>&gt;<br>
&gt; _______________________________________________<br>
&gt; Ale mailing list<br>
&gt; <a href="mailto:Ale@ale.org" target="_blank">Ale@ale.org</a><br>
&gt; <a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
<br>
<br>
</div>--<br>
<div><div></div><div>I do not particularly want to go where the money is -<br>
 &nbsp;it usually does not smell nice there. -- A. Stepanov<br>
_______________________________________________<br>
Ale mailing list<br>
<a href="mailto:Ale@ale.org" target="_blank">Ale@ale.org</a><br>
<a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
</div></div></blockquote></div><br>