【问题标题】:permission denied even though file is full permisson即使文件是完全权限,权限也被拒绝
【发布时间】:2017-01-16 15:58:08
【问题描述】:

我正在尝试制作一个类似的闹钟 https://milkteafuzz.com/j/2012/02/22/a-simple-bash-alarm-clock/ 但我得到权限被拒绝错误。 我必须运行 usr/bin 中的文件吗?我也试过了也没有用 我的代码是:

 #!/bin/bash
printf "What time are you setting this alarm for? "
read date
echo Okay! Will ring you on $(date --date="$date").
sleep $(( $(date --date="$date" +%s) - $(date +%s) ));
echo Wake up!
 while true; do
 /home/-------/Music/mapleleaf.mp3
  sleep 1
done

【问题讨论】:

  • /home/yehuda/Music/mapleleaf.mp3的权限是什么?
  • 您正试图像执行程序一样执行 MP3 文件;它不是。您需要一个将文件作为输入的程序来播放它。 (您正在复制的脚本使用/usr/bin/mpg123。)
  • 请澄清:(1)您的文件中#! 之前是否有空格? (2) 您是在运行脚本时立即获得“权限被拒绝”,还是仅在“醒来!”之后获得“权限被拒绝”?是印刷的? (3) 请张贴ls -l thenameofthisscript完整的、未经编辑的输出。
  • 我们只能猜测您正在尝试播放 .mp3,而您无法在 bash 中执行该文件。如果你想玩它,你需要使用一个播放器程序。

标签: linux bash


【解决方案1】:

您需要在脚本中的文件名之前指定一个程序来读取 mp3 文件。任何能够在您的系统上播放 mp3 文件的程序都可以做到这一点。

权限错误源于数据文件(例如您的 mp3 文件)没有(不应该)设置“执行”位,因为它们不是程序并且不能被操作系统“运行”。即使是 root 用户也会遇到同样的问题,因为这不是访问权限问题,而是操作系统(正确地)拒绝运行未标记为可执行的文件。

激活 mp3 可执行位(将使用 chmod 实用程序完成)然后尝试运行它是行不通的,因为内容显然对操作系统执行无效。

【讨论】:

  • 它不会崩溃。操作系统仍会识别出它不是有效的可执行文件。你会得到一个不同的,仍然是神秘的,但更准确的错误消息,比如bash: foo.mp3: cannot execute binary filefoo.mp3: Exec format error
  • 是的,我意识到我必须使用“vlc”之类的程序播放 mp3 文件,谢谢
【解决方案2】:

您正在复制的脚本使用/usr/bin/mpg123 播放 MP3 文件。

/usr/bin/mpg123 ~/alarm.mp3
^^^^^^^^^^^^^^^
  program
                ^^^^^^^^^^^
                file to play

您只指定了要播放的文件,这不是一个有效的命令。您需要指定使用哪个程序来播放文件(这可能需要您先安装此类程序)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 2015-12-11
    • 2012-11-24
    • 2020-04-12
    • 2018-03-08
    • 2016-11-12
    • 2016-06-25
    • 1970-01-01
    相关资源
    最近更新 更多