СОЕДИНИТЕ работу каналом с относительными каталогами

Причина, почему $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, и т.д. потерянный их особые значения.

читайте больше для детали

2
12.03.2013, 02:32
2 ответа

Если программа действительно так недружелюбна, что ожидает, что Вы выполните ее только из своего собственного каталога затем, Вам, вероятно, придется оставить ее в своем собственном каталоге (включая sub папки) и создать сценарий, который находится на Вашем ПУТИ. Этот сценарий изменит каталоги на местоположение программы и выполнит его. Все будут хорошо. Хорошо... достаточно хорошо. Что-то как:

#! /bin/sh -
cd /usr/local/crudesoftware &&
./theprogram  
2
27.01.2020, 22:07

Много переменных условий применения программ, которые уникальны для себя. Например, названная программа foo мог бы искать названную переменную среды FOO_DIR или FOO_DATA_PATH (и это могло бы использовать текущий каталог в качестве значения по умолчанию, если переменная не установлена). Я знаю, что Вы сказали, что у Вас нет источника, но у Вас есть какая-либо документация? Возможно, образец .bashrc для использования программы?

Как последнее прибежище попробовать

strings foo

(принимающий это foo название программы). Это перечисляет все “строки” в двоичном файле (см. strings(1) для деталей). Это произведет большой вывод; большая часть его мусор. Необходимо, вероятно, передать его по каналу в пейджер; например, more или less. Ищите строки, которые похожи на имена переменной среды – т.е. все заглавные буквы, возможно включая символы нижнего подчеркивания – и пытаются установить их на каталог, где Вы установили программу.

1
27.01.2020, 22:07

Теги

Похожие вопросы