В чем разница: и правда?

В bash :

 $ type : : is a shell builtin $ type true true is a shell builtin 

Похоже, что они одинаковы, но они не дают такой же системный след:

 $ strace : strace: :: command not found $ strace true execve("/bin/true", ["true"], [/* 82 vars */]) = 0 [snip] exit_group(0) = ? 

Я попытался использовать strace bash -c : 2>:.txt и strace bash -c true 2>true.txt , но не смог найти различий между ними, кроме мест памяти.

В dash :

 $ type : : is a special shell builtin $ type true true is a shell builtin 

Хорошо, так что они не совпадают. help : и help true не очень полезны, и они возвращают то же самое в bash и dash . Есть ли какие-либо практические различия между ними, за исключением того, что : сохраняет три байта и делает скрипты менее читаемыми?

  • Почему bash 4.3 сохраняет выделение памяти в скрипте
  • Печать переменной с обратной косой чертой в тире
  • dash reports «Синтаксическая ошибка:» («неожиданно» при использовании замещения процесса
  • Вызов bash из sh (тире) с командами, считанными из args, и «Unterminated quoteed string» / «неожиданный EOF»
  • Дэш-эквивалент саморасправки выхода скрипта
  • есть ли какие-либо другие оболочки, кроме bash / dash, которые используются по умолчанию в дистрибутивах GNU / Linux?
  • Почему никто не использует истинную оболочку Bourne как / bin / sh?
  • тире: список объявленных функций
  • 2 Solutions collect form web for “В чем разница: и правда?”

    Нет никакой реальной разницы в поведении. Обе команды ничего не делают и выходят с успешным статусом. : подчеркивает, что ничего не делает; true подчеркивает успешный статус.

    strace true works, потому что true – это как встроенная оболочка, так и внешняя команда ( /bin/true ); : есть только встроенная оболочка (нет /bin/: – хотя это может быть и, вероятно, было на очень старых Unix-системах). В bash попробуйте

     type -a : type -a true 

    Причины, по которым они существуют, являются историческими. Если я правильно помню, некоторые очень ранние оболочки не содержали синтаксиса комментариев, поэтому вместо этого использовалась команда do-nothing : .

    Существует некоторая внутренняя разница в dash . Просматривая исходный код, доступный по адресу git: //git.kernel.org/pub/scm/utils/dash/dash.git, показывает некоторые разные коды кода в eval.c , но я не смог визуально отобразить другое поведение, отличное от слова special в выводе type :

    Они одинаковы в Баше. Посмотрите на builtins/colon.def в исходном коде Bash-4.2.

    В вашей команде strace true вы фактически используете двоичный /bin/true вместо встроенного true.

    Interesting Posts

    Как найти активный сетевой интерфейс из пользовательского пространства?

    Совместное использование памяти между виртуальной машиной и хостом

    Как удалить файл лицензии, когда debian-упаковка с использованием автозапуска automake?

    Почему «tail -f … | хвост "не может произвести какой-либо выход?

    Можно ли добавить что-то не-доменное имя без имени хоста в качестве псевдонима хоста?

    Я хочу установить Kali Linux бок о бок на моей машине, которая в настоящее время работает на Ubuntu 12.10

    Отображать conky всегда только на экране LVDS

    RHEL Как войти в систему как другой пользователь из оболочки?

    как перемешать символы строк в bash?

    Разрешить user1 «su – user2» без пароля

    Можно ли запустить графическую программу на рабочем столе другого пользователя с правами root?

    Заменить значения некоторых ключей в текстовом файле с одной строкой

    Создание словаря / словаря для тестирования проникновения

    Для чего используются TTY> 12?

    Использование команды find для поиска папки, игнорирующей случай

    Linux и Unix - лучшая ОС в мире.