2

After solving that one, I tried to source the sh script editing csh.cshrc. I added the following lines in its end:

. /etc/fsl/5.0/fsl.sh
setenv FREESURFER_HOME/home/User/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.csh

But I get the error /usr/sbin/.: Permission denied.. I tried to change it to source /etc/fsl/5.0/fsl.sh bt then I got the error Illegal variable name..

The file I'm trying to source is:

# FSL configuration file
#  - to be sourced by the user, typically in .bashrc or equivalent
#  - note that the user should set
# Written by Mark Jenkinson, FMRIB Analysis Group, University of Oxford
# Modified for Debian by Michael Hanke <michael.hanke@gmail.com>

# clean out previous fsl PATH components: DO NOT EDIT THE NEXT TWO LINES
PATH=$( echo $PATH | tr ":" "\n" | grep  -v "/usr/lib/fsl/" | tr -s "\n" ":" | sed  's/:$//') 
LD_LIBRARY_PATH=$( echo $LD_LIBRARY_PATH | tr ":" "\n" | grep  -v "/usr/lib/fsl/" |  tr -s "\n" ":" | sed 's/:$//')

#### Set up standard FSL user environment variables ####

# Debian has a fixed FSLDIR
FSLDIR=/usr/share/fsl/5.0

# Possum is installed in the same directory
POSSUMDIR=$FSLDIR

# add the fsl binary path to the search path
PATH=$PATH:/usr/lib/fsl/5.0

# The following variable selects the default output image type
# Legal values are:
# NIFTI, NIFTI_PAIR, NIFTI_GZ, NIFTI_PAIR_GZ
# This would typically be overwritten in ${HOME}/.fsl/fsl.sh if the user
# wished to write files with a different format
FSLOUTPUTTYPE=NIFTI_GZ

# Comment out the definition of FSLMULTIFILEQUIT to enable
#  FSL programs to soldier on after detecting multiple image
#  files with the same basename ( e.g. epi.hdr and epi.nii )
FSLMULTIFILEQUIT=TRUE

# The following variables specify paths for programs and can be changed
# or replaced by different programs, by default set sensible Debian-defaults
FSLTCLSH=/usr/bin/tclsh
FSLWISH=/usr/bin/wish
FSLBROWSER=/etc/alternatives/x-www-browser

# The following variables are used for running code in parallel across
#  several machines ( i.e. for FDT )
# for a cluster engine setup see below
FSLLOCKDIR=
FSLMACHINELIST=
FSLREMOTECALL=

# If set, tell FSL to use Sun Gridengine to submit jobs instead of running them
# directly on the machine. If unset, no attempt will be made to utilize
# gridengine, even if it is running. By default SGE is not utilized.
#FSLPARALLEL=1

# Mail setup for gridengine jobs. See man qsub (-m option) for all possible
# settings. By default no email is sent.
FSLCLUSTER_MAILOPTS="n"

# default queue for job submissions
#FSLCLUSTER_DEFAULT_QUEUE="all.q"

###################################################
####    DO NOT ADD ANYTHING BELOW THIS LINE    ####
###################################################

export FSLDIR POSSUMDIR PATH FSLMULTIFILEQUIT FSLOUTPUTTYPE FSLTCLSH \
       FSLWISH FSLBROWSER FSLLOCKDIR FSLMACHINELIST FSLREMOTECALL


# Configure the linker search path for Debian FSLs internal shared libraries
LD_LIBRARY_PATH=/usr/lib/fsl/5.0${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH

# load user configuration
if [ -f "${HOME}/.fslconf/fsl.sh" ] ; then
"${HOME}/.fslconf/fsl.sh" ;
fi

How can I run this script?

  • 3
    In your previous question, you said that you want to source that file in the .profile file. In fact there is a comment in that file which say that you should source the file in .bashrc file. And now you say that you source the sh script editing csh.cshrc? Why? You can't source a bash file in tcsh/csh. A variable is declared different in tcsh/csh. – Radu Rădeanu Sep 13 '14 at 17:56
3

The problem is that the file you are sourcing is a mix of bashisms/shisms that are not supported by tcsh, starting by how you declare variables:

PATH=$( echo $PATH | tr ":" "\n" | grep  -v "/usr/lib/fsl/" | tr -s "\n" ":" | sed  's/:$//') 

This doesn't work in tcsh. You must modify it to:

set PATH = `echo $PATH | tr ":" "\n" | grep  -v "/usr/lib/fsl/" | tr -s "\n" ":" | sed  's/:$//'`

In this case, there are two changes. You must explicitly say you are going to set a variable using set and tcsh doesn't support the $(...) subshells, you need to use backticks `...`.

Also, the if..else is wrong, it should be:

if (-f "${HOME}/.fslconf/fsl.sh") then
  "${HOME}/.fslconf/fsl.sh" ;
endif

That should do it. The full reference can be found in oocities.

Oh, forgot to add, since set is explicit, you don't need any of the export VAR. Just remove them.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.