p.lijnzaad@med.uu.nl
2005-Dec-02 16:42 UTC
[Rd] R CMD INSTALL fails if cd prints stuff to stdout ... (PR#8363)
--Boundary_(ID_erFAa+o6kWefQxXf6GD2RA) Content-type: text/plain; charset="us-ascii" Content-disposition: inline Content-transfer-encoding: 7bit Dear all, I came across puzzling behaviour of R CMD INSTALL, which I tracked down to the fact that in some shells (or in some user customizations of them), the cd command prints out the new directory. As a result, the $pkgs variable gets a wrong value, e.g.in the following transcript: philip at gen031:tmp$ R CMD INSTALL GlobalAncova /usr/lib/R/bin/INSTALL: line 873: cd: /home/philip/tmp/GlobalAncova /var/tmp/philip/misc/GlobalAncova: No such file or directory sed: can't read DESCRIPTION: No such file or directory ERROR: no 'Package' field in 'DESCRIPTION' philip at gen031:tmp$ The error at line 873 is due to the variable $pkgs containing the string '/home/philip/tmp/GlobalAncova /var/tmp/philip/misc/GlobalAncova' (i.e. including the new line. Incidentally, /home/philip/tmp dir is a symlink to /var/tmp/philip/misc; hence the non-identical directory names). A simple fix (cd "${1}" > /dev/null 2>&1 && ${GETWD}) takes care of this, and should work under sh, ksh, bourne shell, zsh. A context diff is attached; I hope this will prove useful. Kind regards, Philip -- Philip Lijnzaad Genomics Laboratory Dept. of Biomedical Genetics University Medical Center (UMC), Utrecht Stratenum room 2.201 (on Mondays and Thursdays not in after 14.45) MSN chat (*NOT* email): philip_lijnzaad at hotmail.com P.O. Box 85060, 3508 AB Utrecht (Universiteitsweg 100, 3584 CG Utrecht) The Netherlands tel: +31 (0)30 253 8464 fax: +31 (0)30 253 8479 --Boundary_(ID_erFAa+o6kWefQxXf6GD2RA) Content-type: text/x-diff; charset="us-ascii"; name="INSTALL.patch" Content-disposition: attachment; filename="INSTALL.patch" Content-transfer-encoding: 7bit *** INSTALL~ Wed Jun 22 11:09:59 2005 --- INSTALL Fri Dec 2 17:08:50 2005 *************** *** 127,136 **** get_packages () { ## get the full path names to all packages contained in $1. ## NOTE: modifies pkgs! if grep "^Contains:" "${1}/DESCRIPTION" >/dev/null; then bundlepkg=`get_dcf_field Contains "${1}/DESCRIPTION"` for p in ${bundlepkg}; do ! pkgs="${pkgs} \"`cd "${1}/${p}" && ${GETWD}`\"" if test -f "${1}/${p}/DESCRIPTION.in"; then ## Try being defensive about missing final newlines, or extra ## empty lines. --- 127,138 ---- get_packages () { ## get the full path names to all packages contained in $1. ## NOTE: modifies pkgs! + PROMPT_COMMAND+ BASH_COMMAND if grep "^Contains:" "${1}/DESCRIPTION" >/dev/null; then bundlepkg=`get_dcf_field Contains "${1}/DESCRIPTION"` for p in ${bundlepkg}; do ! pkgs="${pkgs} \"`cd "${1}/${p}>/dev/null 2>&1" && ${GETWD}`\"" if test -f "${1}/${p}/DESCRIPTION.in"; then ## Try being defensive about missing final newlines, or extra ## empty lines. *************** *** 139,145 **** fi done else ! pkgs="${pkgs} \"`cd "${1}" && ${GETWD}`\"" fi } --- 141,147 ---- fi done else ! pkgs="${pkgs} \"`cd "${1}" > /dev/null 2>&1 && ${GETWD}`\"" fi } --Boundary_(ID_erFAa+o6kWefQxXf6GD2RA)--