【问题标题】:Bourne Shell: Convert ~/Desktop to /users/me/DesktopBourne Shell:将 ~/Desktop 转换为 /users/me/Desktop
【发布时间】:2011-02-13 00:49:35
【问题描述】:

keytool 不能解析公正的目录。即这有效:

keytool -keystore "/users/me/Desktop" ...

这不是:

keytool -keystore "~/Desktop" ...

有什么我可以这样称呼的:

keytool -keystore "$(<cmd> ~/Desktop)" ...

更新

我想我实际上应该更具体:

这就是我正在做的事情:

myVar=~/Desktop
<allow user to overwrite default value of myVar>
keytool -keystore "$myVar" ...

我认为在 keytool 命令中不引用 $myVar 是不安全的,以防有人在其中放置一些恶意代码。

【问题讨论】:

  • 虽然很可爱,但标签已经足够杂乱无章了。请不要创建不需要的新的。
  • 根据您的编辑,您肯定需要 eval 因为外壳不会递归地扩展内容。这意味着它将扩展变量,但不会扩展变量内部的内容
  • 您应该使用$HOME 或解析/etc/passwd(例如使用getent)或类似的身份验证文件/服务。我认为~ 更多是为了方便命令行。

标签: bash scripting path


【解决方案1】:

那是因为你引用了路径。 Keytool 或 unix 中的任何其他命令行程序与通配符无关,因为 shell 用于实际扩展路径名。如果你不引用路径,它会很有效。

【讨论】:

  • 我对keytool一无所知,但我想说这不一定是基于$@的存在。
  • 双引号应该没问题。单引号会将其视为文字字符串。
【解决方案2】:

我不认为这是一个编程问题,但你试过不带引号吗?即

keytool -keystore ~/Desktop ...

【讨论】:

    【解决方案3】:

    eval echo "~/foo"

    例如keytool -keystore $(eval echo ~/Desktop)

    【讨论】:

    • 为我工作。你确定你没有像你在评论中那样把你的引号倒过来吗?
    【解决方案4】:

    怎么样

    keytool -keystore "$(echo ~/Desktop)"
    

    keytool -keystore "$HOME/Desktop"
    

    但是,另一方面,~/Desktop 也应该可以正常工作。仅尝试使用 bash,此处没有任何其他 Bourne shell。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-13
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2016-09-13
      • 1970-01-01
      相关资源
      最近更新 更多