相关疑难解决方法(0)

从Bash中的$ PATH变量中删除路径的最优雅方法是什么?

或者更一般地说,如何从Bash环境变量中以冒号分隔的列表中删除项?

我想我多年前已经看到了一种简单的方法,使用更高级的Bash变量扩展形式,但如果是这样的话,我已经忘记了它.对谷歌的快速搜索出乎意料地少了几个相关结果,没有一个我称之为"简单"或"优雅".例如,分别使用sed和awk的两种方法:

PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;')
PATH=!(awk -F: '{for(i=1;i<=NF;i++){if(!($i in a)){a[$i];printf s$i;s=":"}}}'<<<$PATH)
Run Code Online (Sandbox Code Playgroud)

什么都不直接存在?有什么类似于Bash中的split()函数吗?

更新:
看起来我需要为我的故意模糊的问题道歉; 我对解决特定用例的兴趣不如激发良好的讨论.幸运的是,我明白了!

这里有一些非常聪明的技巧.最后,我在工具箱中添加了以下三个功能.魔法发生在path_remove中,这主要基于Martin York巧妙使用awk的RS变量.

path_append ()  { path_remove $1; export PATH="$PATH:$1"; }
path_prepend () { path_remove $1; export PATH="$1:$PATH"; }
path_remove ()  { export PATH=`echo -n $PATH | awk -v RS=: -v ORS=: '$0 != "'$1'"' | sed 's/:$//'`; }
Run Code Online (Sandbox Code Playgroud)

唯一真正的缺点是使用sed去除尾部结肠.考虑到马丁的其他解决方案是多么简单,但我非常愿意接受它!


相关问题: 如何在shell脚本中操作$ PATH元素?

bash shell path variable-expansion list-processing

106
推荐指数
10
解决办法
6万
查看次数

使用文件的内容使用SED替换字符串

什么是mac shell脚本的sed命令将用myFile.txt的整个字符串内容替换字符串"fox"的所有迭代.

myFile.txt将是带有换行符和各种字符的html内容.一个例子是

    </div>
  </div>
  <br>
  <div id="container2">
    <div class="question" onclick="javascript:show('answer2')";>
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑1

这是我的实际代码:

sed -i.bkp  '/Q/{
s/Q//g
r /Users/ericbrotto/Desktop/question.txt
}' $file
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到:

sed in place editing only works for regular files. 
Run Code Online (Sandbox Code Playgroud)

在我的文件中,Q被大量的中文字符(!)取代.离奇!

unix bash shell terminal sed

26
推荐指数
2
解决办法
2万
查看次数

如何在 cypress 项目的 gitlab pipeline 中连接到 openVpn

我正在开发一个 cypress 项目。我已经在 GitLab 中设置了管道。我的应用程序只能在通过 Open VPN 连接的专用网络上运行。

有人可以指导我如何将其添加到 .gitlab-ci.yml 文件中吗???

我的 .gitlab-ci.yml 是:

image: cypress/base:10

stages:
  - test
test:
  stage: test
  script:
    - npm install
    - npm run test
Run Code Online (Sandbox Code Playgroud)

我的package.json如下:

{
  "name": "cypresspackage",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "clean:reports": "rm -R -f cypress/reports && mkdir cypress/reports && mkdir cypress/reports/mochareports",
    "pretest": "npm run clean:reports",
    "scripts": "cypress run --spec cypress/integration/dummy.feature",
    "combine-reports": "mochawesome-merge ./cypress/reports/mocha/*.json > cypress/reports/mochareports/report.json",
    "generate-report": "marge cypress/reports/mochareports/report.json -f report -o cypress/reports/mochareports",
    "report:copyScreenshots": "cp -r cypress/screenshots cypress/reports/mochareports/assets",
    "posttest": …
Run Code Online (Sandbox Code Playgroud)

javascript openvpn gitlab-ci cypress cypress-cucumber-preprocessor

3
推荐指数
1
解决办法
3882
查看次数

为什么'cp'在这个shell脚本中失败了?

这是我编写的shell脚本的代码片段:

for src in $(find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc)
do
    src=$(basename ${src})
    dest="~/.${src}"
    copy="${src} -> ${dest}"
    cp $src $dest && echo -e "${ok} ${copy}" || echo -e "${fail} ${copy}"
done
Run Code Online (Sandbox Code Playgroud)

由于某种原因,cp无法执行.例如,在这种情况下$src='bashrc',我收到此错误:

cp: ~/.bashrc: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会这样,不过,因为很明显,~/.bashrc就是目标,没有来源,因此cp不应该关心它是否存在与否.究竟出了什么问题?

bash shell scripting

2
推荐指数
3
解决办法
4563
查看次数