【问题标题】:Bash script to mkdirbash 脚本到 mkdir
【发布时间】:2011-03-17 03:30:31
【问题描述】:

我正在尝试根据用户输入的变量创建一个目录,然后将文件保存在那里。

我认为这对我来说已经足够简单了,但是当我尝试在那里保存时收到错误消息“没有这样的文件或目录”。 当我点击“ls”时,它会列出带有“?”的目录。在它之后。

我正在 Mac 终端上使用 .sh 脚本。

相关代码:

#get user input
echo "enter the collection number"
read COLLECTION
#create the directory
mkdir "$COLLECTION"dir
#calculate a checksum and save it to the above directory
sudo openssl md5 /dev/disk1 > "$COLLECTION"dir/md5.txt

--

【问题讨论】:

  • 您的代码对我有用,尽管我在 /dev/disk1 上得到“没有这样的文件或目录”,而我的机器上没有。但是sudo openssl md5 testfile > "$COLLECTION"dir/md5.txt 工作得很好。不过,我在 ubuntu 上。
  • 当您输入ls 时,您是在运行脚本的目录还是它创建的目录中?
  • 一般调试提示:1) 使用bash -x 查看变量的插值方式和其他有用的调试信息 2) 检查或输出脚本中每个命令后的退出代码 ($?)确保他们按照应有的方式工作
  • 无法保证 $COLLECTION 以 / 结尾或具有有效字符... bash 的乐趣。 :) 鉴于您在 Mac 上,可以很容易地在 Python 中完成。
  • @lindley - 很高兴为您提供帮助。如果您已经解决了您的问题,请接受正确的答案。

标签: macos bash shell mkdir


【解决方案1】:

检查你的脚本,看看你是否有 DOS 风格的行尾 (\r\n)。如果您不确定,可以安全地在脚本上运行 dos2unix

您在文件名中看到的? 实际上可能是行尾的回车(因为 Bash 不会将其视为空格)。

所以"$COLLECTION"dir/ 不存在; "$COLLECTION"dir\r/ 会。

编辑: Vi 通常可以很好地向您展示这些特殊字符是什么。

ls | vi -

【讨论】:

  • 谢谢!这解决了问题。我想我从某事或其他地方留下了一个回车。
  • 您可以使用ls -lb 显示文件名中的控制字符。
【解决方案2】:

此代码中唯一可能给您“没有这样的文件或目录”错误的部分是最后一行。 /dev/disk1 是否存在于您的机器上?

【讨论】:

    【解决方案3】:

    当我收到该错误时,我使用mkdir -p ;)

    【讨论】: