我的bash脚本被编写为转到当前目录中的每个子文件夹:
for d in */;
do
target=${d%/}
cd "$target"
done
当我运行我的bash脚本时,我得到了一个存在的目录的cd错误:
++ for d in '*/'
++ target='Zelkova serrata'
++ cd 'Zelkova serrata'
./script7.sh: line 8: cd: Zelkova serrata: No such file or directory
然而,在终端命令行中,我可以在与脚本相同的目录中执行cd 'Zelkova serrata'
,一切都很好。bash脚本是否可能有一个与其所在目录不同的源目录?
4条答案
按热度按时间vwhgwdsa1#
您正在遍历相对路径,请尝试包含绝对路径,例如:
1yjd4xko2#
问题是当前目录是“state”,它在循环的每一次传递中都被修改,并且为了使用发布的命令,cwd状态不应该被传递改变。
生成一个子shell可以解决这个状态变化的问题。子shell继承其父级的状态,但不影响父级。
do ( command; command ; ...; )
将在每次循环传递时生成一个新的shell。gab6jxml3#
有防弹功能
如果那里有任何空间,您将避免名称拆分。
7uhlpewt4#
要了解发生了什么,请尝试以下操作并仔细检查输出:
也许你想要的是:
或者如果
exec 3<.
在您的shell中不工作: