总长DR:必须使用export
命令定义别名/变量,我不能使用完整路径,而使用相对路径(即在我要分配的目录的正上方定义别名)会出错Not found
。我还能做些什么吗?
我必须运行这两个命令:
export FREESURFER_HOME=/usr/local/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh
只是该系统不是我自己的,所以我没有权限/usr/local/freesurfer
。所以我临时在其他地方安装了名为 freesurfer 的程序(完整的安装路径是/Raid6/users/bob/Downloads/freesurfer
)。
所以我一直在尝试将别名设置FREESURFER_HOME
为 freesurfer 目录(我需要执行此步骤,因为该SetUpFreeSurfer.sh
文件假定其已定义并使用它。
当我像这样使用完整路径时:export FREESURFER_HOME=/Raid6/users/bob/Downloads/freesurfer
然后键入$FREESURFER_HOME
并按 Enter 键,我收到“权限被拒绝”错误。
因此,我导航到“下载”目录,这样输入内容ls
就会列出该目录等内容freesurfer
。然后我尝试export FREESURFER_HOME=freesurfer
,但在我这样做之后,输入$FREESURFER_HOME
并按 Enter 键会显示该消息freesurfer: not found
。
不知道从这里做什么/尝试,非常感谢任何帮助!
答案1
我放弃一切,甚至出口指示。
FREESURFER_HOME=freesurfer
在其他语言中,这只是$FREESURFER_HOME = "freesurfer"
字符串分配。在 bash 中,您在每次使用时决定是指字符串还是变量值
$ echo FREESURFER_HOME
FREESURFER_HOME
$ echo $FREESURFER_HOME
freesurfer
美元符号是告诉 bash 你的意思是该名称的值/内容的方式。
设置变量后,您可以使用它(带有美元符号)
source $FREESURFER_HOME/SetUpFreeSurfer.sh
是您想要该变量的用途。您想要在修改后的 fs-home 目录中运行/获取某个脚本。对于一个调用来说source freesurfer/SetUpFreeSurfer.sh
,如果内容是“freesurfer”,则它与 完全相同。
如果您键入$FREESURFER_HOME
命令(第一个单词是命令!),它会扩展为其值“freesurf”(或任何值),并且这不是现有命令(-> 未找到)。
在其他情况下,变量中的有效命令会发生不好的事情。
$ cmd='echo hello'
$ $cmd
hello
这里什么也没发生,这是一个友好的命令——但是这种混叠至少是值得怀疑的。我认为没有人这样做,那就是破坏性的。对于一个正常的别名有一个额外的内置:
$ alias cmd='echo hello'
$ cmd
hello
(这里没有任何$
迹象——好多了!)
(可能需要导出来传播变量。根本不会改变这些事实。把它放回去!)
答案2
我想一个更简单的选择就是使用 ln -s /usr/local/freesurfer freesurfer 创建一个指向 freesurfer 目录的符号链接。