1

很简单,我的 /usr/local/bin/ 中有一个指向 dart2js 的链接,它在运行时会引发重复的错误。

我跑了

sudo ln -s /Users/macbook/Development/dart/dart-sdk/bin/dart2js /usr/local/bin/dart2js

从终端运行 dart2js 时,我会看到

...
/usr/local/bin/dart2js: line 9: 1=/Users/macbook/Development/dart/dart-sdk/bin/dart2js: No such file or directory
/usr/local/bin/dart2js: line 9: 1=/Users/macbook/Development/dart/dart-sdk/bin/dart2js: No such file or directory
/usr/local/bin/dart2js: line 9: 1=/Users/macbook/Development/dart/dart-sdk/bin/dart2js: No such file or directory
/usr/local/bin/dart2js: line 9: 1=/Users/macbook/Development/dart/dart-sdk/bin/dart2js: No such file or directory
/usr/local/bin/dart2js: line 9: 1=/Users/macbook/Development/dart/dart-sdk/bin/dart2js: No such file or directory
... etc

我想我只是错误地使用了链接,但我知识渊博,不知道为什么。

4

1 回答 1

0

我不久前遇到了这个问题并发布了这个问题Can't run dart command line script using a symlink

我还添加了一个解决方法,它也可能对您的情况有所帮助-您可能需要对其进行一些调整,但它应该可以帮助您入门。

我现在使用的一种解决方法是在与 testscript.dart 相同的目录中创建一个名为“testscript”的 bash 脚本,并改为链接到该脚本

我查找 bash 脚本的当前目录并启动 dart 脚本(从内部获取 Bash 脚本的源目录)。

#!/bin/bash
ME="$(basename "$(test -L "$0" && readlink "$0" || echo "$0")")"

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
  SOURCE="$(readlink "$SOURCE")"
  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

${DIR}/${ME}.dart ${BASH_SOURCE[0]}

而不是使用 io.Platform.script 获取命令的(符号链接)名称,我必须将其作为参数传递以使其在 dart 脚本中可用(我使用用于启动脚本的符号链接的名称,就像 dart 中的参数一样script) 这样我必须区分脚本是否直接启动,否则使用 io.Platform.script 和 args[0] 。

我认为这一切都应该更容易。

于 2014-02-10T16:21:11.230 回答