Если вы посмотрите формальную документацию библиотеки Python JSON, вы увидите, что вызов json.tool
должен быть python -mjson.tool
. Это означает, что программа в файле tool.py
в каталоге json
вашей установки python или что она находится в файле __ init __. Py
в каталоге Каталог инструмента
в json
в вашей установке python.
На самом деле файл является первым из двух, а его функция main ()
содержит <20 строк кода, которые можно легко проанализировать:
Если вы предоставите больше параметров он фактически покажет использование:
$ python -m json.tool a b c
/opt/python/2.7.11/lib/python2.7/json/tool.py [infile [outfile]]
Это для версии 2.7 инструмента. Версия 3.5.1 имеет дополнительный параметр, и там параметры отображаются, если вы используете -h
:
$ python -m json.tool -h
usage: python -m json.tool [-h] [--sort-keys] [infile] [outfile]
A simple command line interface for json module to validate and pretty-print
JSON objects.
positional arguments:
infile a JSON file to be validated or pretty-printed
outfile write the output of infile to outfile
optional arguments:
-h, --help show this help message and exit
--sort-keys sort the output of dictionaries alphabetically by key
Здесь происходит пара разных нелогичных вещей.
Прежде всего, ваша команда удаленному хосту анализируется как
(sh -c echo starting); who -b; date; echo $SHELL
Внешние кавычки удаляются, оставляя вам только запуск эха
, запускаемый в sh
, поэтому $ SHELL
имеет значение / bin / bash
.
Во-вторых, «запуск» не печатается по причинам, указанным в этом ответе: https://unix.stackexchange.com/a/253424
Однако вы можете решить обе эти проблемы, просто заключая команду в другой набор кавычек, оставляя вас с
ssh myhost sh -c '"echo starting; who -b ; date; echo $SHELL"'
Хотя я бы сказал, что это будет более понятно, если вы переместите одинарные кавычки, чтобы охватить команду sh
:
ssh myhost 'sh -c "echo starting; who -b ; date; echo $SHELL"'