【问题标题】:Bash script acts differently depending on what executes itBash 脚本的行为不同,具体取决于执行它的内容
【发布时间】:2013-12-15 13:10:35
【问题描述】:

我有一个 bash 脚本,它充当 utorrent-server 的后处理脚本,将变量传递给重命名为 FileBot 的媒体。

脚本:

#!/bin/bash
TORRENT_NAME=$1
TORRENT_PATH=$2
TORRENT_LABEL=$3
TORRENT_KIND=$4
TORRENT_TITLE=$5

/usr/share/filebot/bin/filebot.sh -script fn:amc --output "/mnt/Storage/" \
   --log-file "amc.log" --action move --conflict override -non-strict \
   --def music=n subtitles=en artwork=n xbmc="192.168.0.123" deleteAfterExtract=y \
     clean=y "ut_dir=$TORRENT_PATH" "ut_file=$TORRENT_NAME" "ut_kind=$TORRENT_KIND" \
    "ut_title=$TORRENT_TITLE" "ut_label=$TORRENT_LABEL" "ut_state=5" "seriesFormat=TV \
    Shows/{n}/Season {s.pad(2)}/{n} - {s00e00} - {t}" "movieFormat=Movies/{n} ({y})/{n} ({y})" \
 &>> /home/xbmc/run.log

如果我手动运行此脚本,它会按预期工作,但是当 uTorrent 执行它时,它会返回“没有这样的文件或目录”。通过标准错误。我最初让 uTorrent 直接调用此脚本,但我遇到了同样的问题。

有谁知道这是什么原因造成的?

更新(所有目录/文件夹的权限):

drwxr-xr-x   3 root root 4096 Nov 27 23:52 /home  
drwxr-xr-x  20 xbmc xbmc 4096 Dec 15 21:46 /home/xbmc  
drwxr-xr-x  10 root root 4096 Oct 17 06:51 /usr  
drwxr-xr-x 218 root root 4096 Dec 13 15:32 /usr/share  
drwxr-xr-x   3 root root 4096 Dec 15 15:55 /usr/share/filebot  
drwxr-xr-x   2 root root 4096 Dec 15 18:56 /usr/share/filebot/bin  
-rwxr-xr-x 1 xbmc xbmc 615 Dec 15 21:44 /home/xbmc/run.sh  
-rwxr-xr-x 1 root root 552 Dec 15 18:56 /usr/share/filebot/bin/filebot.sh  

【问题讨论】:

  • 哪个是非此类文件? filebot.sh?
  • 您能告诉我们您是如何使用 uTorrent 执行它的吗?是否有独立执行的+x权限?
  • 什么是TORRENT_PATH?是绝对路径吗?
  • TORRENT_PATH 是从 uTorrent 提供给脚本的参数,我已经通过运行 uTorrent 使用的脚本验证了路径是否正确(在 uTorrent 日志中说明)例如 /home/xbmc/ run.sh "friends.s06e11.720p.bluray.x264-mrs.sujaidr.mkv" "/mnt/Storage/Downloads/Complete/TV/Friends Season 6 Complete 720p.BRrip.mrlss.sujaidr" "TV" "multi" “Friends Season 6 Complete 720p.BRrip.mrlss.sujaidr”我假设没有这样的文件是 filebot.sh 因为那是唯一被调用的脚本,filebot.sh 也有 +x
  • 如果没有找到filebot.sh,bash 会说run.sh: line 8: /usr/share/filebot/bin/filebot.sh: No such file or directory。如果没有全部说明,那么可能是run.sh 没有找到。检查run.sh 路径,并可能在脚本的开头添加一些内容以查看它是否被执行。

标签: bash shell utorrent


【解决方案1】:

更改当前工作目录。

【讨论】:

  • 那么,CD进入“/usr/share/filebot/bin”然后调用filebot.sh?
  • 值得一试。使环境相同
  • 你甚至可以把它放在脚本的顶部
  • 有没有办法记录目录变化的输出?所以如果它没有改变,那么我们可以知道吗?更新:目录更改不起作用,它说“第 9 行:filebot.sh:找不到命令”
  • 在给出日志的绝对路径后,它们确实返回了正确的东西:/usr/share/filebot/bin filebot.sh
【解决方案2】:

如果 filebot.sh 是 no-such-file,我建议你试试这个:

    chmod -R a+x /usr/share/filebot/bin/filebot.sh

如果是你的 run.sh,

    chmod -R a+x /home/xbmc/run.sh

您可以尝试以所有者身份运行 filebot.sh。我认为值得一试。

    chown YOURUSERNAME /usr/share/filebot/bin/filebot.sh
    chmod u+s /usr/share/filebot/bin/filebot.sh

【讨论】:

  • 不仅是脚本,还有文件夹。如果您在该文件夹中没有 x 权限,则无法访问该文件夹的内容。您应该检查 /usr、/usr/share、/usr/share/filebot、/usr/share/filebot/bin 或 /home、/home/xbmc 是否具有 x 权限。
  • filebot.sh 会不会是 root 拥有的,我应该把它交给我的用户吗?
  • 如果您的 filebot.sh 对用户、组和其他人具有 x 权限,那不是问题。你能粘贴ls -ld /usr /usr/share /usr/share/filebot /usr/share/filebot/bin /home /home/xbmcls -l /usr/share/filebot/bin/filebot.sh /home/xbmc/run.sh的输出吗?
  • 权限请看原帖
  • 这不是权限问题,所以两个脚本都被找到了。问题应该出在你的 filebot.sh 的作用上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多