Ваше описание не очень хорошо согласуется с предоставленным 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 такое количество раз и конкатенирует данные.
Здесь я сделаю несколько предположений:
drush
установлен в ~ / .composer / vendor / bin
myalias
- это имя удаленного хоста, на котором у вас есть drush
myalias
в вашем примере команды . Когда вы входите в систему в интерактивном режиме с помощью bash
в качестве оболочки, bash
сценарий запуска .bash_profile
выполняется. Если вы установите PATH
, здесь все хорошо, и вы можете найти drush
напрямую.
Когда вы запускаете что-то в неинтерактивном режиме, например ssh remotehost id
, оболочка входа отсутствует, поэтому .bash_profile
не запускается. Однако, поскольку ваша оболочка bash
, сценарий сеанса .bashrc
выполняется. Я подозреваю, что вы не устанавливаете там свой ПУТЬ
, поэтому drush
не может быть найден.
Есть несколько вариантов. Вот четыре предложения
.bashrc
вызовом .bash_profile
, если он ранее не вызывался этой оболочкой (я предпочитаю) PATH =. Строка ..
в .bashrc
(easy) .bash_profile
и .bashrc
в общий файл с исходным кодом Авторы .bash_profile
и .bashrc
(более элегантный) drush
в системное место (например, / usr / local / bin
или где-нибудь в / opt
) и убедитесь, что этот каталог включен в общесистемные настройки ПУТЬ
(сложнее) PATH="~/.composer/vendor/bin:$PATH" ssh myalias 'drush'
предоставит измененный PATH
на ssh
и любые утилиты, которые он вызывает.