Почему передача аргументов команде в вызове env не работает? - PullRequest
3 голосов
/ 13 ноября 2011

У меня есть скрипт оболочки для запуска узла с некоторыми аргументами, такими как:

#!/usr/bin/env node --harmony_proxies
...

Это нормально работает под OS X, но в Ubuntu это приводит к ошибкам:

/usr/bin/env: node --harmony_proxies: No such file or directory

Узел определенно установлен и в PATH, поскольку, если я уберу флаг --harmony_proxies, он будет работать нормально Есть ли другой способ передачи аргументов при использовании env в Ubuntu?

Ответы [ 3 ]

5 голосов
/ 13 ноября 2011

В Linux вся строка, следующая за именем интерпретатора, передается интерпретатору как один аргумент, и эта строка может содержать пробелы. [1] Таким образом, аргументы командной строки не разделяются, и команда env пытается выполнить файл node --harmony_proxies, который явно не найден. См. здесь и здесь для получения более подробной информации.

Вот альтернативное решение для вас:

#!/bin/sh
exec node --harmony_proxies "$@"

Надеюсь, это поможет. Удачи!

0 голосов
/ 14 декабря 2016

Если вы не хотите изменять источник, псевдоним оболочки может быть правильным решением.

Пример из моего .bashrc:

alias how2='/usr/bin/env node --no-deprecation "$(which how2)"'
0 голосов
/ 13 ноября 2011

Если команда node установлена ​​в определенном месте, вы можете использовать ее напрямую:

#!/usr/bin/node --harmony_proxies

Но если вы не можете предположить, что node установлена ​​в определенном месте, перейдитес одним из других ответов.

...