如何在路径有空格的另一个 bash 脚本中运行 bash 脚本?
Posted
技术标签:
【中文标题】如何在路径有空格的另一个 bash 脚本中运行 bash 脚本?【英文标题】:How to run bash script inside another bash script where path has spaces? 【发布时间】:2021-08-28 00:49:44 【问题描述】:您好,我正在尝试从另一个 bash 脚本中调用一个 bash 脚本。结构如下:
脚本一:
a.sh
示例:
a.sh /Users/Desktop is this/
现在我想像这样在 b.sh 中运行 a.sh 脚本b:
b.sh <pass_a_path_with_spaces>
示例:
b.sh
path="/Users/Desktop\ is\ this/"
script_a="/Users/Desktop\ is\ this/a.sh"
source "$script_a" "$path"
但是当我运行它时,我得到了这个错误: /Users/Desktop\ is\ this/a.sh: 没有这样的文件或目录
谁能指出我哪里出错了?
谢谢!
【问题讨论】:
你在“双引号”。删除反斜杠:"/Users/Desktop is this/"
您是否考虑过使用Command Substitution
和相对路径?您可以使用 $()
gnu.org/software/bash/manual/html_node/… 嵌套多个命令
@mugglewithastruggle:你做得过火了:要么 用反斜杠转义每个空格, 或 将字符串放在引号之间,而不是两者兼而有之。示例:path='/Users/Desktop is this'
。小警告:我不会命名变量 path;也许有一天你会从 bash 切换到 zsh,而 path 在 zsh 中有特殊的含义。
【参考方案1】:
使用引号'
,因为这是横向的,并且单引号内的字符串在使用变量时不会更改。
例如, a.sh '/Users/桌面是这个/'
【讨论】:
【参考方案2】:您需要在目录周围加上空格double quote
以保留目录名称,如下所示:
b.sh
path=/Users/"Desktop is this"/
script_a=/Users/"Desktop is this"/a.sh
source "$script_a" "$path"
【讨论】:
以上是关于如何在路径有空格的另一个 bash 脚本中运行 bash 脚本?的主要内容,如果未能解决你的问题,请参考以下文章