无法打开文件 lol.json:使用 Jq 拒绝权限?

Mil*_*ani 7 linux permissions bash jq

我在这里面临某种许可问题。我可以使用 读取文件cat,使用 对其进行更改,nano但由于某种原因,jq存在权限问题。这是我面临的:

msp@coolpad:~/projects/lol$ jq .name lol.json
jq: error: Could not open file lol.json: Permission denied
Run Code Online (Sandbox Code Playgroud)

在检查权限时,这就是我得到的:

msp@coolpad:~/projects/lol$ ls -l
total 4
-rw-rw-r-- 1 msp msp   0 Sep 27 04:04 lol-domains.txt
-rwxrwxrwx 1 msp msp 593 Sep 27 04:38 lol.json
Run Code Online (Sandbox Code Playgroud)

如您所见,我已尝试授予它777权限,但它仍然显示Permission denied. 我知道设置777权限不是一个好主意,我完全打算664在问题解决后将其改回。Anyhelp会appriciated。

更新 1:我尝试重新安装jqsnap但仍然无法解决问题。

更新 2:输出cat lol.json

msp@coolpad:~$ cat lol.json
{"name":"lol"}

Run Code Online (Sandbox Code Playgroud)

更新 3:输出echo '{"name":"lol"}' | jq .name

msp@coolpad:~$ echo '{"name":"lol"}' | jq .name
"lol"
Run Code Online (Sandbox Code Playgroud)

更新 4:评论中出现的一种解决方法:

cat lol.json | jq .name

Bor*_*ris 16

sudo snap remove jq
sudo apt install jq
Run Code Online (Sandbox Code Playgroud)

jq通过 Ubuntu 的snap.

Snap 包具有“限制”,即“严格”或“经典”。在这种情况下,jq必须已打包为“严格”,这意味着它有自己的/tmp/snap.jq/目录,不能读取系统/tmp目录和一堆其他目录。想要使用“经典限制”的 Snap 包,必须由 snap 负责人手动批准,--classic安装时必须通过,像这样:sudo snap install <package name> --classic

无论如何,jqapt(上述两个命令)卸载并重新安装它的快照版本为我修复了权限错误。该jqapt是一个较新的版本比在snap(就像2020年7月的在Ubuntu 20.04至少)。


在我看来,通过安装命令行工具snap是一个错误,至少不会--classic因为您会遇到上述错误。这是预期的行为,它不太可能改变,因为设计者snap认为软件告诉你一个存在的文件不存在没有任何问题。在 snapcraft 论坛上查看有关此问题的主题:https ://forum.snapcraft.io/t/jq-cant-read-some-files/17835