【问题标题】:macos bash script reading file but get access deniedmacos bash脚本读取文件但访问被拒绝
【发布时间】:2020-12-16 13:11:41
【问题描述】:

这是关于 macos Catalina 下的 bash,但也应该在 Big Sur 下运行。

我想用 HTML 文件的内容填充一个变量,然后用 grep 过滤它。

只有我得到的 HTML 文件访问被拒绝。

作为测试,我使用

#!/bin/bash -xv

$cat "./omnikresponse.html"  #(it doesn't matter whether I use the whole path or not).

该文件具有以下权限。

16 -rw-r--r--@ 1 la staff 6384 Dec 15 17:23 omnikresponse.html

com.apple.TextEncoding 15

com.apple.lastuseddate#PS 16

com.apple.metadata:_kMDItemUserTags 42

com.apple.metadata:kMDLabel_yjfxnnrt6pupmoito5lwf3xyea 89

com.dropbox.attrs 26

de.codingmonkeys.seestate 92

在安全设置中,终端具有“全盘访问”。 该脚本以用户身份运行,并且与 HTML 文件位于同一文件夹中。 我可以将 HTML 文件设置为 755,然后我可以访问,但出于安全原因,我猜这并不是真正需要的。

我该如何解决这个问题?为什么我必须更改权限才能读取文件?

【问题讨论】:

  • 只有当cat 是一个环境变量并且在其中一个子进程中设置为合适的值时,您的程序才有意义。

标签: bash macos file privileges cat


【解决方案1】:

除非$cat 包含您要在该文件上运行的程序的名称,否则问题是shell(正确地)认为您正在尝试执行这个文件,就好像它是脚本或二进制文件。

如果不是很明显,您在许多初学者教程中看到的$ 并不是您应该在计算机中键入的内容;它是计算机(或者更确切地说是外壳)准备好在终端中接收您的命令时显示的提示符的占位符。

为了说明这一点,$cat 指的是变量cat 的值;如果它未定义或包含空字符串,您的脚本可以简化为

./omnikresponse.html

(引用的点,但这里并不是必须的。见When to wrap quotes around a shell variable。如果你真的想引用变量$cat,可能那个应该用双引号。 )

换句话说,我猜你的脚本应该是

#!/bin/bash
cat ./omnikresponse.html

... 当然,放入脚本实际上没有任何意义;只需输入

cat ./omnikresponse.html

直接在 Bash 提示符下。

(如果您是初学者,很可能您实际上使用的是 Zsh,而不是 Bash。自 MacOS Catalina 以来新用户的默认 shell 是 Zsh;在以前的版本中,它曾经是 Bash。但这个答案可能对两者都适用. ...如果它有效。我不得不猜测几件事。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2012-11-28
    相关资源
    最近更新 更多