Причина, почему $hello
не работает, как Вы ожидали:
for...do...done
a Compound Command
который определяется на этапе tokenlize.for
не команда. Так, Вы не можете сделать этого:
$ "for" i in {0..4}; do echo $i; done
sh.exe": syntax error near unexpected token `do'
Когда удар разделил командную строку на маркеры, Это видит "for"
нет for
, так маркер do
неожиданно.
В Вашем случае:
$ hello='for i in {0..4}; do echo $i; done'
$ $hello
sh.exe": for: command not found
Bash находит один маркер $hello
, затем variable-expansion
&&word-spliting
произойдите в порядке.
На самом деле удар анализирует результат как a Simple Command
:
for
) берет отдых в качестве args (i
,in
,{0..4}
, ;
, do
, ...) for
, do
, ;
, done
, и т.д. потерянный их особые значения.Если программа действительно так недружелюбна, что ожидает, что Вы выполните ее только из своего собственного каталога затем, Вам, вероятно, придется оставить ее в своем собственном каталоге (включая sub папки) и создать сценарий, который находится на Вашем ПУТИ. Этот сценарий изменит каталоги на местоположение программы и выполнит его. Все будут хорошо. Хорошо... достаточно хорошо. Что-то как:
#! /bin/sh -
cd /usr/local/crudesoftware &&
./theprogram
Много переменных условий применения программ, которые уникальны для себя. Например, названная программа foo
мог бы искать названную переменную среды FOO_DIR
или FOO_DATA_PATH
(и это могло бы использовать текущий каталог в качестве значения по умолчанию, если переменная не установлена). Я знаю, что Вы сказали, что у Вас нет источника, но у Вас есть какая-либо документация? Возможно, образец .bashrc
для использования программы?
Как последнее прибежище попробовать
strings foo
(принимающий это foo
название программы). Это перечисляет все “строки” в двоичном файле (см. strings(1)
для деталей). Это произведет большой вывод; большая часть его мусор. Необходимо, вероятно, передать его по каналу в пейджер; например, more
или less
. Ищите строки, которые похожи на имена переменной среды – т.е. все заглавные буквы, возможно включая символы нижнего подчеркивания – и пытаются установить их на каталог, где Вы установили программу.