本意是想获取代码仓相对路径,代码如下

base_dir=`pwd`
repo forall -c '{
    user_dir=$(realpath --relative-to="$base_dir" "$PWD")
    echo $user_dir
}'

执行后报错 realpath: '': No such file or directory

分析原因

这个问题的原因是repo forall -c命令在每个仓库中执行一个新的shell实例,这个新的shell实例不会继承当前shell实例的环境变量。所以,虽然在repo forall -c命令之前定义了$base_dir,但是在repo forall -c命令中的shell实例并不能访问到它。

解决这个问题的一种方法是在repo forall -c命令中直接使用$base_dir的值,而不是使用$base_dir变量。可以使用双引号来实现这一点,因为在双引号中的变量会被shell自动扩展。

修改如下:

base_dir=`pwd`
repo forall -c "{
user_dir=\$(realpath --relative-to=\"$base_dir\" \"\$PWD\")
echo \$user_dir
}"

使用了反斜杠(\)来转义特殊字符,以防止它们在repo forall -c命令中被提前扩展。这样,$base_dir$PWD就会在每个仓库的shell实例中被正确地扩展了。

反斜杠(\)来转义特殊字符

在shell脚本中,反斜杠(\)是一个特殊的字符,被称为转义字符。它的作用是改变紧跟其后的字符的含义。当你在一个字符前面加上反斜杠,shell会将这个字符视为普通字符,而不是特殊字符。

在上面的例子中,反斜杠被用来转义$字符。在shell脚本中,$字符通常用来引用变量。例如,$PWD会被替换为当前工作目录的路径。但是,如果你在$字符前面加上反斜杠,如\$PWD,shell就会把$PWD当作普通的字符串,而不会替换为当前工作目录的路径。

同样,反斜杠也被用来转义双引号(")。在shell脚本中,双引号用来定义字符串。如果你在双引号内部的$字符前面加上反斜杠,如\"$PWD\",那么$PWD就会在每个新的shell实例中被扩展,而不是在当前的shell实例中被提前扩展。

总的来说,反斜杠(\)在shell脚本中用来防止特殊字符被提前扩展,这就是所谓的转义

【SHELL】反斜杠解决多个shell实例扩展的更多相关文章

  1. sed替换 - 含反斜杠(/)和Shell变量

    sed替换 - 含反斜杠(/)和Shell变量 摘自: https://blog.csdn.net/zhenyongyuan123/article/details/6616263 2011年07月19 ...

  2. Unix Shell中单引号、双引号字符、反斜杠、反引号的使用[转]

    在执行shell脚本的时候,shell将会对脚本中的行进行解释,然后执行:对于一些特殊处理的句子,我们可以使用引号或者反斜线来避免shell解释执行之.如下,当在命令行中输入:echo *child. ...

  3. linux,shell输入反斜杠显示'W'。

    linux,shell输入反斜杠显示'W'. solution: 字体必须为"Courier New".

  4. linux shell中单引号、双引号、反引号、反斜杠的区别

    摘自http://www.jb51.net/article/33495.htm 1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg 403-212- ...

  5. Shell中单引号、双引号、反引号、反斜杠的区别

    1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg -- Susan Topple -- 如果我们想查找的是Susan Goldberg,不能直接使 ...

  6. Linux下Shell脚本字符串单引号、双引号、反引号、反斜杠的作用和区别

    一.单引号 str='this is a string' 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的: 单引号字串中不能出现单引号(对单引号使用转义符后也不行) ...

  7. shell脚本中的反引号,单引号,双引号与反斜杠

    转自:http://blog.sina.com.cn/s/blog_6561ca8c0102we2i.html 反引号位 (`)经常被忽略,而且容易与单引号弄混.它位于键盘的Tab键的上方.1键的左方 ...

  8. shell脚本特殊符号——单引号、双引号、反引号、反斜杠

    1. 单引号 ( '' ) 被单引号用括住的内容,将被视为单一字串. 2. 双引号 ( " " )  被双引号用括住的内容,将被视为单一字串.双引号只要求忽略大多数,具体说,括在双 ...

  9. Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍

    Shell中的特殊字符有 1.$ 美元符 2.\ 反斜杠 3.` 反引号 4." 双引号 5.< ,>;,*,?,[,] 下面我一一举列说明 一.$符号 1.echo $? 显示 ...

  10. sed替换 - 含斜杠(\)和Shell变量

    gen_image.bat中的内容如下:   FOTARomPacker.exe -i .\_ini\FOTARomPacker.ini -o .\_Output\a.bin @IF %ERRORLE ...

随机推荐

  1. Win10遇到服务器启动失败 80端口被占用如何解决

    Win10提示"服务器启动失败,80端口被占用"怎么办?具体解决方法如下 步骤如下: 1.以管理员身份运行cmd; 2.输入:net stop http 注:如果提示是否真的需要停 ...

  2. DVWA Insecure CAPTCHA(不安全的验证码)全等级

    Insecure CAPTCHA(不安全的验证码) 目录: Insecure CAPTCHA(不安全的验证码) 1. Low 2.Medium 3. High 4.Impossible 加载验证码需要 ...

  3. Pikachu漏洞靶场 RCE(远程命令执行/代码执行)

    RCE 文章目录 RCE 概述 exec "ping" exec "eval" 概述 RCE(remote command/code execute),远程命令 ...

  4. 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 10.控制台变量的用法 & 静态函数库 & 使用对象通道对碰撞进行控制

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本文对应Lecture 15, 61 - Console Variables for debugging and ...

  5. Luogu1419 区间问题 二分 单调优化

    原题链接 题意 给定一段长度为1e5的序列A,并且给我们一个范围 \([S, T]\), 要求我们求出一段长度在这个范围内的连续子序列,并且要使这个连续子序列的平均值最大,输出这个平均值. 思路 一开 ...

  6. Flutter PageView(轮动图)

    Flutter中的轮动图以及抖音上下滑页切换视频功能等等,这些都可以通过 PageView 轻松实现 PageView常见属性: PageView 的使用 class MyPage extends S ...

  7. Boost Your Strategy With The Content Marketing Tools

    Boost Your Strategy With The Content Marketing Tools In today's digital landscape, content marketing ...

  8. 史上最强DIY,手工制作一只会说话的机器狗

    摘要:波士顿动力的机器狗,想要么?快来跟我一起动手制作吧. 波士顿动力的机器狗了解吗? 一个会后空翻.会开门.会爬楼梯的AI. 最近,我们实验室就来了一批mini版的机器狗,虽然不会各种高难度杂技动作 ...

  9. SEAL 0.3 正式发布:国内首个全链路软件供应链安全管理平台

    12月1日,软件供应链安全管理平台 SEAL 0.3 正式发布(以下简称"SEAL"),这是国内首个以全链路视角保护软件供应链的安全管理平台.两个月前 SEAL 0.2 发布,该版 ...

  10. 火山引擎DataLeap的Catalog系统搜索实践(三):Learning to rank与后续工作

    Learning to rank Learning to rank主要分为数据收集,离线训练和在线预测三个部分.搜索系统是一个Data-driven system,因此火山引擎DataLeap的Cat ...