我想将目录添加到IDL Path,并使用:
pref_set,'IDL_PATH','+/home/mydirectory/Tools/IDL/:<IDL_DEFAULT>',/COMMIT
它有效,但当我从IDL退出并再次启动时,我输入:
.run myfile
“myfile”是“mydirectory”中的一个,并且出现错误:
% Error opening file. File: myfile
每次启动IDL以使其工作时我都需要pref_set ...
。这是为什么?
我使用Ubuntu 14.04和bash。 IDL 8.4。
export IDL_PATH= '+/mydirectory/IDL:<IDL_DEFAULT>'
请注意,单引号和+
在此非常重要。这是IDL
语法而不是bash。希望它可以帮助任何人遇到同样的问题。 ;)
答案 0 :(得分:1)
这对你有用。再次启动IDL后检查!path
系统变量:
IDL> print, !path
您的目录应该是第一个条目。
另外,检查首选项文件以查看它是否实际被更改。使用PREF_SET
后,退出IDL并检查文件:
cat ~/.idl/idl/pref-10-idl_8_4-unix
文件中应该有IDL_PATH
的条目。
答案 1 :(得分:1)
这实际上取决于您使用的IDL版本。如果您使用的是6.2和7.0.3之间的IDL版本,则使用PREF_SET
来控制路径。在6.2之前,您可以在Ubuntu中设置环境变量并修改IDL设置bash文件(应该带有IDL)。在v7.0.3之后,您可以将!PATH
的值显式设置为字符串。
您需要知道操作系统的搜索路径分隔符。如果您使用的是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])
这应该为您提供正确的路径规范。