我在$ PATH变量中定义了相同的路径6次.
我没有退出检查它是否有效.
如何删除重复项?
$ PATH变量如下所示:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin
Run Code Online (Sandbox Code Playgroud)
我该怎么把它重置为
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud) 我想将变量(此处称为var)的内容复制到文件中.
文件名存储在另一个变量中destfile.
我这样做有问题.这是我尝试过的:
cp $var $destfile
Run Code Online (Sandbox Code Playgroud)
我也用dd命令尝试了同样的事情......显然shell认为$var是指一个目录,所以告诉我找不到目录.
我该如何解决这个问题?
是否有一种从PATH类shell变量中删除元素的惯用方法?
那是我想要的
PATH=/home/joe/bin:/usr/local/bin:/usr/bin:/bin:/path/to/app/bin:.
Run Code Online (Sandbox Code Playgroud)
和删除或替换的/path/to/app/bin,而不重挫可变的其余部分.允许我将新元素放在任意位置的额外点数.目标将由明确定义的字符串识别,并且可以在列表中的任何点处发生.
我知道我已经看到了这一点,并且可以自己拼凑一些东西,但我正在寻找一个很好的方法.便携性和标准化加分.
我使用bash,但欢迎你最喜欢的shell中的例子.
这里的上下文是需要在多个版本之间方便地切换(一个用于进行分析,另一个用于处理框架)的大型科学分析包,它产生几十个可执行文件,数据存储在文件系统周围,并使用环境变量帮助找到所有这些东西.我想编写一个选择版本的脚本,并且需要能够删除$PATH与当前活动版本相关的元素,并用与新版本相关的相同元素替换它们.
这与$PATH在重新运行登录脚本等时防止重复元素的问题有关.
我想在生成的脚本中记录传递给cmake的参数.例如,"my-config.in"将由cmake处理,它的定义如下:
配置= "@ CMAKE_ARGS @"
之后cmake,my-config将包含这样的行:
config =" - DLINUX -DUSE_FOO = y -DCMAKE_INSTALL_PREFIX =/usr"
我试过CMAKE_ARGS,CMAKE_OPTIONS但失败了.没有文件提到这一点.:-(
通常在cshrc文件中有类似的东西来设置路径:
set path = ( . $otherpath $path )
Run Code Online (Sandbox Code Playgroud)
但是,当您多次获取cshrc文件时,路径会重复,您如何防止重复?
编辑:这是一种不干净的方式:
set localpaths = ( . $otherpaths )
echo ${path} | egrep -i "$localpaths" >& /dev/null
if ($status != 0) then
set path = ( . $otherpaths $path )
endif
Run Code Online (Sandbox Code Playgroud)