Вызов SSH не видит правильный путь к $, существующий на сервере

Ваше описание не очень хорошо согласуется с предоставленным hexdump, поскольку все вторые байты после ed являются 00. Однако вам следует попытаться освоить хотя бы один из более сложных инструментов Unix для работы со строками, а именно awk.

Вы можете упростить поток данных, поместив в каждую строку ровно одно шестнадцатеричное число. В вашем примере вы можете передать его через tr -s ' ' '\n'. Однако, более полезно, если вы сделаете man hexdump, вы увидите, что он предоставляет опции формата вывода для печати одного числа в строке, так что вам не нужно дополнительно манипулировать им. Eg

hexdump -v -e '1/1 "%02x\n"'

предоставит данные типа

2f
ed
3f
00
08

Переведите эти данные в этот скрипт

awk '$1=="ed" {
    getline byte1
    getline byte2
    number = strtonum("0x" substr(byte2,2,1))
    print "len is " number
    data = byte1 byte2
    while(number-->0){getline byte; data = data byte}
    print data
} '

Он проверяет, является ли первое слово в строке ed, затем использует getline для чтения следующей строки в переменную byte1, а следующей строки в byte2. Команда substr() берет последний символ, конкатенирует его с "0x" и вызывает strtonum для преобразования шестнадцатеричного числа в десятичное. Цикл while вызывает getline такое количество раз и конкатенирует данные.

4
13.03.2017, 22:29
2 ответа

Здесь я сделаю несколько предположений:

  • drush установлен в ~ / .composer / vendor / bin
  • myalias - это имя удаленного хоста, на котором у вас есть drush
  • , указанный вами веб-сервер фактически совпадает с myalias в вашем примере команды

. Когда вы входите в систему в интерактивном режиме с помощью bash в качестве оболочки, bash сценарий запуска .bash_profile выполняется. Если вы установите PATH , здесь все хорошо, и вы можете найти drush напрямую.

Когда вы запускаете что-то в неинтерактивном режиме, например ssh remotehost id , оболочка входа отсутствует, поэтому .bash_profile не запускается. Однако, поскольку ваша оболочка bash , сценарий сеанса .bashrc выполняется. Я подозреваю, что вы не устанавливаете там свой ПУТЬ , поэтому drush не может быть найден.

Есть несколько вариантов. Вот четыре предложения

  1. Сделайте .bashrc вызовом .bash_profile , если он ранее не вызывался этой оболочкой (я предпочитаю)
  2. Добавить дубликат PATH =. Строка .. в .bashrc (easy)
  3. Переместите настройки среды из .bash_profile и .bashrc в общий файл с исходным кодом Авторы .bash_profile и .bashrc (более элегантный)
  4. Установите drush в системное место (например, / usr / local / bin или где-нибудь в / opt ) и убедитесь, что этот каталог включен в общесистемные настройки ПУТЬ (сложнее)
3
27.01.2020, 20:57
PATH="~/.composer/vendor/bin:$PATH" ssh myalias 'drush'

предоставит измененный PATHна sshи любые утилиты, которые он вызывает.

0
27.01.2020, 20:57

Теги

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