Как стать автором
Обновить

Обсуждение: стандартные UNIX-утилиты, которые мало кто использовал и использует сейчас

Время на прочтение3 мин
Количество просмотров11K
Всего голосов 18: ↑12 и ↓6+14
Комментарии9

Комментарии 9

Есть утилита, которую многие используют и не знают, что это утилита
/usr/bin/[
:)
А многие думают, что используют, а на самом деле — нет, поскольку shell «не доводит до греха» (обращения к ФС) и справляется сама, будучи достаточно продвинутой для этого :)

Это bash так делает, а вот минималистичные вариации все же используют test, который [

да и bash в пайпе вызывает сам себя выполняя builtins. (обращаясь в ФС )
кажется так.

PS. Сейчас пишу проект в школе 21 про шелл и буду благодарен если кто поправит.
да и bash в пайпе вызывает сам себя выполняя builtins. (обращаясь в ФС )

Что-то я не вижу запуска дочернего процесса в случае встроенного test.


:) > strace -e trace=%process bash -c "[ 1 -eq 1 ]"
execve("/bin/bash", ["bash", "-c", "[ 1 -eq 1 ]"], 0x7ffdeeebf7f0 /* 72 vars */) = 0
arch_prctl(ARCH_SET_FS, 0x7f28dab7e740) = 0
exit_group(0)                           = ?
+++ exited with 0 +++

:) > strace -e trace=%process bash -c "[[ 1 -eq 1 ]]"
execve("/bin/bash", ["bash", "-c", "[[ 1 -eq 1 ]]"], 0x7fff57679a80 /* 72 vars */) = 0
arch_prctl(ARCH_SET_FS, 0x7f89dfc60740) = 0
exit_group(0)                           = ?
+++ exited with 0 +++

:) > strace -e trace=%process bash -c "/usr/bin/test 1 -eq 1"
execve("/bin/bash", ["bash", "-c", "/usr/bin/test 1 -eq 1"], 0x7ffeeb49ed40 /* 72 vars */) = 0
arch_prctl(ARCH_SET_FS, 0x7f9f5d72d740) = 0
execve("/usr/bin/test", ["/usr/bin/test", "1", "-eq", "1"], 0x55caa9954ab0 /* 72 vars */) = 0
arch_prctl(ARCH_SET_FS, 0x7fd2b445a540) = 0
exit_group(0)                           = ?
+++ exited with 0 +++

:( > bash --version
bash --version
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
:) > lsb_release -a
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:    18.04
Codename:   bionic
а если в пайпе вызвать [ 1 -eq 1 ]?
Посмеялся, когда увидел, что за «энтузиаст» поддерживает форк typo на Go.
Видно, тоже повелся на хайп Go :)
А я недавно, пытаясь переделать для тещи plain text таблицу (нужно было изменить ширины рядов), на SO наткнулся на пример использования утилиты column. Удобная штука, и много разных параметров имеет…
Пример:
echo -e "a b c\n12 4312234 4341324\nllaoo asdf  fdaasd" | column -t          
a      b        c
12     4312234  4341324
llaoo  asdf     fdaasd

(но все равно пришлось делать при помощи awk!)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий