Не очень изящное решение, но работы.
i=5 # Execute 5th command from the beginning of history
`history | sed -n "${i}p" | sed 's/^.\{7\}//'`
Иногда. Системные вызовы, которые полезно разоблачить, обычно обнажаются. Оболочка, которая не может изменить каталоги, не будет очень полезной оболочкой. Некоторые из них, например chdir
, реализованы как сборки оболочки, потому что они могут влиять только на процесс, который их вызвал. Другие реализованы в виде небольших программ. Другие вообще не выставляются: есть очень мало причин вызывать mmap
непосредственно из оболочки, так что вы не сможете, если только сами не напишете обертку (что в любом случае было бы бесполезно).
Нет никакого стандартного соответствия или эмпирического правила. Имена могут быть чем угодно, например, rm
реализована в виде системного вызова unlink
; однако есть также команда unlink
, которая также делает это, но не имеет большинства опций командной строки и, по сути, является лишь обёрткой. И синтаксис трубки
, вместе с соответствующими прочитанными
и записью
открывается с помощью синтаксиса |
.
man syscalls
должен дать вам список системных вызовов.
Утилиты просто используют системные вызовы, на самом деле это единственный способ, которым утилиты могут это делать. Невозможно, скажем, удалить файл или изменить разрешения без прямого или косвенного прохождения через механизм syscall.
(Представьте, каково было бы, если бы это было не так. Каждая программа, которая хотела бы удалить файл, должна была бы реализовать свои собственные драйверы файловой системы и жесткого диска. Также не было бы безопасности, потому что каждая программа отвечала бы за проверку своих собственных разрешений. Вместо этого вы просто используете syscall, а потом ядро все выясняет)
.