【问题标题】:Getting "Permission denied" on dirname and basename在 dirname 和 basename 上获取“权限被拒绝”
【发布时间】:2023-03-15 09:00:02
【问题描述】:

就是这样。他们只是不会为我工作。这次我做错了什么?

    # nquo is: /home/bryan/renametest/C D/y z

    # script:
    dirn=dirname "$nquo"
    echo "dirn $dirn"
    bnam=basename "$nquo"
    echo "bnam $bnam"

运行结果:

    ./script3.sh: 208: /home/bryan/renametest/C D/y z: Permission denied
    dirn 
    ./script3.sh: 208: /home/bryan/renametest/C D/y z: Permission denied
    bnam 

【问题讨论】:

  • 可以通过ls -ld "$nquo"查看文件/目录的权限
  • 这是 bash 吗?如果是这样,您缺少$(...)dirnamebasename 调用周围的反引号。另外,使用包含空格的文件名非常棘手。
  • @JimGarrison 不,如果您知道自己在做什么,那一点也不难。
  • @glglgl:它需要细心和关注细节。处理带有空格等的名称比不处理名称要困难得多。或者,换一种说法,当名称中不包含空格时,您可以摆脱草率的技巧,这些技巧碰巧有效,因为名称中没有空格。
  • @JonathanLeffler 我总是将"..." 放在我的变量周围,一切正常。

标签: linux shell dirname


【解决方案1】:

就目前而言,您的脚本正在尝试运行在$nquo 中命名的文件,首先将环境变量dirn 设置为值dirname,然后将变量bnam 设置为值@987654325 @。由于它不可执行,因此您会收到有关无法执行该文件的错误消息。

您大概打算在文件名上运行命令,这需要反引号或(最好)$(...) 围绕它:

dnam=$(dirname "$nquo")
bnam=$(basename "$nquo")

【讨论】:

  • 就是这样!再次感谢乔纳森。
  • 这个答案对我来说也是安全的
猜你喜欢
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
相关资源
最近更新 更多