В Linux с systemtap
(как root
) вы можете сделать
stap -e 'probe kernel.function("do_task_stat") {
printf("%o\n", $task->fs->umask);
exit()
}
probe begin {system("cat /proc/4321/stat>/dev/null")}'
Выполнение cat / proc / 4321 / stat
вызовет этот зонд. на do_task_stat
, где мы можем получить доступ к полю fs-> umask
соответствующего процесса ' task_struct
в ядре.
Проблема заключается в одинарных кавычках. Оболочка интерпретирует одинарные кавычки как «передать это дословно, без интерпретации каких-либо специальных символов». Вам нужно заменить их двойными кавычками и избежать двойных кавычек внутри параметра. Примерно так:
sed -i "2i\\
\"1.0.1\": \"1.0.1.zip\",
" file.json
Для вашего исходного вопроса, вставив вкладку с sed
, это работает(2i
вставит в строку 2, где первая строка файла 1 ). Если вы хотите добавить символ табуляции в командную строку (или в vim ), нажмите Ctrl+Q-<Tab>
, чтобы указать, что символ табуляции является буквальным и не должен интерпретироваться редактором/оболочкой. В случае других редакторов, посмотрите в документации редактора, как ввести литеральную вкладку.
Примером может быть:
sed -i.json "2i\\
\"1.0.1\": \"1.0.1.zip\",
<Ctrl-Q><Tab>" file.json
, где последовательность <Ctrl-Q><Tab>
означает нажатие этих конкретных клавиш. Это будет зависеть от редактора, который вы используете. В комментариях вы упоминаете, что используете VS Code, поэтому вместо трюка <Ctrl+Q><Tab>
вы можете использовать один из вариантов, указанных в ответах на этот вопрос:https://stackoverflow.com/questions/45566785/vscode-insert-tab-character-manually
Обратите внимание, что между -i
и .json
нет пробела.