Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在IDL中使用pref_set命令_Bash_Idl Programming Language - Fatal编程技术网

Bash 如何在IDL中使用pref_set命令

Bash 如何在IDL中使用pref_set命令,bash,idl-programming-language,Bash,Idl Programming Language,我想向IDL路径添加一个目录,并使用: pref_set,'IDL_PATH','+/home/mydirectory/Tools/IDL/:<IDL_DEFAULT>',/COMMIT “myfile”是“mydirectory”中的一个,错误显示: % Error opening file. File: myfile 每次启动IDL时,我都需要执行pref\u set…,以使其正常工作。为什么呢? 我使用Ubuntu 14.04和bash。IDL 8.4 幸运的是,我的同事帮

我想向IDL路径添加一个目录,并使用:

pref_set,'IDL_PATH','+/home/mydirectory/Tools/IDL/:<IDL_DEFAULT>',/COMMIT
“myfile”是“mydirectory”中的一个,错误显示:

% Error opening file. File: myfile
每次启动IDL时,我都需要执行
pref\u set…
,以使其正常工作。为什么呢? 我使用Ubuntu 14.04和bash。IDL 8.4

幸运的是,我的同事帮我找到了解决办法。在.bashrc中添加路径

export IDL_PATH= '+/mydirectory/IDL:<IDL_DEFAULT>'
export IDL_PATH='+/mydirectory/IDL:'

注意单引号和
+
在这里很重要。这是IDL的语法,而不是bash语法。希望它能帮助任何遇到同样问题的人

这应该适合你。检查
!再次启动IDL后的path
系统变量:

IDL> print, !path
您的目录应该是第一个条目

此外,请检查首选项文件以查看它是否确实正在更改。使用
PREF\u SET
后,退出IDL并检查文件:

cat ~/.idl/idl/pref-10-idl_8_4-unix

文件中应该有一个IDL路径的条目。

它实际上取决于您使用的IDL版本。如果您使用的IDL版本介于6.2和7.0.3之间,则可以使用
PREF_SET
来控制路径。在6.2版本之前,您可以在Ubuntu中设置环境变量,并修改IDL setup bash文件(应该随IDL一起提供)。在v7.0.3之后,您可以显式设置
的值!路径
作为字符串

您需要知道操作系统的搜索路径分隔符是什么。如果您使用的是IDL v5.5或更高版本,则可以定义:

sepath_sep = PATH_SEP(/SEARCH_PATH)
对于Linux,这可能是
(至少对于Unix是这样)。您还需要知道当前的工作目录,该目录可以通过以下方式定义:

vern           = !VERSION.RELEASE       ;;  e.g., '7.1.1'
test           = (vern[0] GE '6.0')
IF (test[0]) THEN cwd_char = FILE_DIRNAME('',/MARK_DIRECTORY) ELSE cwd_char = '.'+slash[0]
cur_wdir       = FILE_EXPAND_PATH(cwd_char[0])
;;  Check for a trailing slash and add it if need be...
然后,要查找当前工作目录中的所有子目录,可以执行以下操作:

t_path0        = EXPAND_PATH('+'+cur_wdir[0],/ARRAY)
t_path         = STRJOIN(t_path0,sepath_sep[0],/SINGLE)
通常,我会做不止一件事来确保IDL可以找到我的文件。我设置了一个环境变量并指定了
!PATH
系统变量(我有v7.1.1)。您可以通过以下方式在IDL中执行此操作:

;;  First define the location of the IDL libraries
def_idldir     = !DIR                         ;;  e.g., '/Applications/itt/idl71'
test           = (GETENV('IDL_DIR') EQ '')
IF (test) THEN env_idldir = def_idldir[0] ELSE env_idldir = GETENV('IDL_DIR')
;;  Again, check for trailing slash here and add if absent
IF (test) THEN SETENV,'IDL_DIR='+env_idldir[0]
;;  First check whether an initial path exists
;;    --> If not, set one
idlpath        = GETENV('IDL_PATH')
test_idl       = (idlpath[0] EQ '')
IF (test_idl) THEN new_path = t_path[0] ELSE new_path = t_path[0]+sepath_sep[0]+idlpath[0]
IF (test_idl) THEN SETENV,'IDL_PATH='+new_path[0]
;;  Test to see if after version 7.0.3 and/or after version 6.2
test__62       = (vern[0] GE '6.2') AND (vern[0] LT '7.0.3')
test_703       = (vern[0] GE '7.0.3')
IF (test__62) THEN PREF_SET,'IDL_PATH',new_path[0],/COMMIT
IF (test_703) THEN !PATH = EXPAND_PATH(new_path[0])

这将为您提供正确的路径规格。

我按照您所说的做<代码>打印,!path确实将我的路径添加到第一个位置,
cat
命令说
pref-10…
是一个目录,我查看它,有一个名为cidl.pref
的文件,其中有一行:
IDL\u path:+/mydirectory/Tools/IDL/:
。我想这意味着一切都很顺利。但实际上,我再次启动了
IDL`,
。运行我的文件
仍然不起作用,错误出现了<代码>打印,!路径排除我添加的路径,但“idl.pref”仍然存在。是否有启动文件?i、 例如,您是否设置IDL_启动首选项或环境变量?重新启动时可能会弄乱IDL\u路径。不,我不熟悉IDL,它应该在哪里?在我的主目录中,如
.bashrc
.profile
IDL
的某个特殊位置?不,我认为每次启动IDL时,启动文件中的某些内容可能会破坏您的路径。但如果没有启动文件,那就不是了。最后要做的一件事是:1)使用
PREF_SET
更改路径,2)退出IDL 3)启动IDL 4)退出IDL 5)再次启动IDL。现在检查您的
!path
,可以吗?上面的内容都写在哪个文件中?在相应目录的
.bashrc
idl.pref
中?此外,我使用了
idl8.4
,并找到了另一种成功添加路径的方法。我会编辑我的问题,让每个人都能看到。谢谢你的详细回答。我使用了一个启动例程,它的源代码类似于一个名为
startup\u idl.pro
的批处理文件。例如,我在启动时执行以下操作:
IDL>@startup\u IDL
。您也可以手动输入。我还在
.bash\u profile
和IDL bash启动中设置了一些路径。请注意,如果在定义
IDL\u PATH
环境变量的
.bash\u profile
.bashrc
文件中添加了
export
语句,则不需要每次重新定义路径。我只在每次启动时这样做,因为我有多个库,其中的例程具有相同的名称,因此,我为不同的目的定义了不同的路径。@honeste_vive您可以设置IDL_启动首选项或环境变量,以便在每次启动IDL会话时自动运行启动批处理文件。@mgalloy-我使用一个bash函数来执行此操作并生成不同的启动文件。
;;  First define the location of the IDL libraries
def_idldir     = !DIR                         ;;  e.g., '/Applications/itt/idl71'
test           = (GETENV('IDL_DIR') EQ '')
IF (test) THEN env_idldir = def_idldir[0] ELSE env_idldir = GETENV('IDL_DIR')
;;  Again, check for trailing slash here and add if absent
IF (test) THEN SETENV,'IDL_DIR='+env_idldir[0]
;;  First check whether an initial path exists
;;    --> If not, set one
idlpath        = GETENV('IDL_PATH')
test_idl       = (idlpath[0] EQ '')
IF (test_idl) THEN new_path = t_path[0] ELSE new_path = t_path[0]+sepath_sep[0]+idlpath[0]
IF (test_idl) THEN SETENV,'IDL_PATH='+new_path[0]
;;  Test to see if after version 7.0.3 and/or after version 6.2
test__62       = (vern[0] GE '6.2') AND (vern[0] LT '7.0.3')
test_703       = (vern[0] GE '7.0.3')
IF (test__62) THEN PREF_SET,'IDL_PATH',new_path[0],/COMMIT
IF (test_703) THEN !PATH = EXPAND_PATH(new_path[0])