Команда Unix, которая немедленно возвращает определенный код возврата?

Из ascii(7) в Linux, читая через строки, для ^D, используя ваше соответствие, мы находим:

   004   4     04    EOT (end of transmission)   104   68    44    D

А затем для ^], используя то же самое соответствие:

   035   29    1D    GS  (group separator)       135   93    5D    ]

Это можно дополнительно подтвердить, переведя терминал в режим raw, и распечатав шестнадцатеричный код ключа mashed, затем просмотрев шестнадцатеричный код в ascii(7):

perl -MTerm::ReadKey -e 'warn "PID $$\n"; $SIG{TERM}=sub {ReadMode 0; exit};' \
  -e 'ReadMode 4; while ($k=ReadKey(0)) { printf "%02x\n", ord $k }'
28
10.10.2016, 19:26
1 ответ

Не существует стандартной команды UNIX для простого возврата определенного значения. Основные утилиты GNU предоставляют только истина и ложь .

Однако вы можете легко реализовать это самостоятельно как ret :

#include <stdlib.h>
int main(int argc, char *argv[]) {
  return argc > 1 ? atoi(argv[1]) : 0;
}

Скомпилировать:

cc ret.c -o ret

И запустить:

./ret 56 ; echo $?

Печать:

56

Если вам нужно, чтобы это работало везде (где bash - доступно, то есть) без установки каких-либо дополнительных инструментов, вам, вероятно, придется прибегнуть к следующей команде, как @TimKennedy, предложенной в комментариях:

bash -c 'exit 56'

Обратите внимание, что допустимый диапазон возвращаемых значений - 0..255 включительно .

18
27.01.2020, 19:38

Теги

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