gpt4 book ai didi

bash - 在 bash shell 脚本中检查目录的问题

转载 作者:行者123 更新时间:2023-12-04 19:04:12 24 4
gpt4 key购买 nike

我正在编写一个批处理脚本 bash,它需要首先检查文件夹是否存在以了解是否运行将创建和填充文件夹的某个 python 脚本。我之前做过类似的事情,可以很好地更改目录并从存储的变量中查找目录,但由于某种原因,我只是在这里遗漏了一些东西。

以下是脚本的大致工作方式。

if [ -d "$net_output" ]
then
echo "directory exists"
else
echo "directory does not exist"
fi

当我运行这个脚本时,我通常会在前面的行中回显 $net_output 以查看它将评估为什么。当脚本运行时,我得到我的 else 代码块,说“目录不存在”,但是当我将之前回显的 $net_output 目录路径复制并粘贴到 shell 终端时,它改变了目录就好了,证明目录事实上确实存在。我在戴尔机器上使用 Ubuntu 12.04。

预先感谢您提供的任何帮助。让我知道我可以提供哪些其他信息。

最佳答案

当有人发布这样的问题时,我遇到的最常见的情况如下:

1. 该变量包含文字引号。 Bash 不会递归解析引号,它只解析命令行上给出的“外部”引号。

$ mkdir "/tmp/dir with spaces"
$ var='"/tmp/dir with spaces"'
$ echo "$var"
"/tmp/dir with spaces"
$ [ -d "/tmp/dir with spaces" ]; echo $?
0
$ [ -d "$var" ]; echo $? # equivalent to [ -d '"/tmp/dir with spaces"' ]
1

2. 该变量包含相对路径,当前目录不是您所期望的。检查 echo "$PWD" 的值输出你所期望的。

3. 该变量是从带有 dos 行结尾的文件中读取的,CRLF (\r\n)。 Unix 和类 unix 系统仅使用 LF (\n) 作为行尾。如果是这种情况,路径将在末尾包含一个 CR (\r)。行尾的 CR 在终端中将是“不可见的”。联系 printf '%q\n' "$var"在调试脚本时。见 BashFAQ 52关于如何摆脱它们。

关于bash - 在 bash shell 脚本中检查目录的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com