我不能定义当前目录中的别名(使用“export”)吗?这样做会给出“未找到”消息

我不能定义当前目录中的别名(使用“export”)吗?这样做会给出“未找到”消息

总长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 目录的符号链接。

相关内容