【问题标题】:Directory of running script in Fish shellFish shell中运行脚本的目录
【发布时间】:2011-03-21 14:52:14
【问题描述】:

我正在尝试使用 Fish shell 运行 SBT。下面是我想要实现的等效 Bash 脚本:

java -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@"

我在 Fish 文档中看到 Bash 中的 $@ 可以替换为 Fish 中的 $argv。 但我看不到用什么替换dirname $0

有人知道 Fish 中的等效脚本吗?

【问题讨论】:

  • 我建议编辑问题以突出显示 $0 转换为 (status -f),这与特定于您的案例的 java 调用不同。这个不同的,非常有用的话题!

标签: bash fish


【解决方案1】:

使用status 内置和argv 变量

fish shell 使用status 命令返回有关许多事物的信息,包括当前运行脚本的文件名或目录。它还使用 argv 变量而不是 Bash 的 $@。此外,fish 的变量是列表,因此您不想像在 Bash 中那样引用它们,除非您尝试将列表的所有内容视为单个字符串。

假设您从 foo.fish 之类的文件运行此操作,则执行此操作的方法是在脚本文件中包含以下行:

java -Xmx512M -jar (status dirname)/sbt-launch.jar $argv

【讨论】:

    【解决方案2】:

    $_ 对我来说似乎只能通过阅读器/命令行直接工作,或者在脚本来源时工作。

    也许这对你有用:

    java -Xmx512M -jar (dirname (status -f))/sbt-launch.jar "$argv"      # fish
    

    【讨论】:

      【解决方案3】:

      fish 相当于这个:

      java -Xmx512M -jar $(dirname $0)/sbt-launch.jar "$@"     # Bash, et al
      

      java -Xmx512M -jar (dirname $_)/sbt-launch.jar "$argv"      # fish
      

      【讨论】:

      • 嗨,丹尼斯,感谢您的回复。不过我有一个奇怪的问题,$_ 对我来说总是一个空字符串。有什么想法吗?
      • $_ 不能在带有fish shebang 的脚本中工作,请查看其他chirps 的答案。
      • @dennis-williamson 你能提供一个例子吗?这是一个 $_ 在使用 fish 1.23.1 gist.github.com/4157106 的脚本中不可用的示例
      • @anddam: 嗯...当 Fish 是我的 interactive shell 时它对我不起作用,但当我的交互式 shell 是 Bash、Korn 或 Zsh 时它确实有效- 即使shebang正在呼唤鱼!当 dash 是交互式外壳时,它甚至可以(很糟糕)工作!这些(父)shell 中的每一个都会导致略有不同的值。顺便说一句,Bash 不导出$_,所以我不知道 Fish 是如何得到它的。 Fish 中的help fish 表示“这是当前运行命令的名称”。它已更新。在 Fish 命令行中尝试 pwd; echo $_。现在将pwd 替换为另一个命令或字符串几个
      • ...加上分号。 echo 始终输出行中第一个命令的名称。这适用于命令行,但显然不适用于脚本。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 2012-05-02
      • 2011-06-03
      • 2021-06-17
      • 1970-01-01
      相关资源
      最近更新 更多