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

В 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 . Есть ли какие-либо практические различия между ними, за исключением того, что : сохраняет три байта и делает скрипты менее читаемыми?

  • dash reports «Синтаксическая ошибка:» («неожиданно» при использовании замещения процесса
  • Очистка ошибок для сценариев оболочки
  • есть ли какие-либо другие оболочки, кроме bash / dash, которые используются по умолчанию в дистрибутивах GNU / Linux?
  • Вызов bash из sh (тире) с командами, считанными из args, и «Unterminated quoteed string» / «неожиданный EOF»
  • Почему никто не использует истинную оболочку Bourne как / bin / sh?
  • Почему kill не работает из сценария, но работает с терминалом?
  • Почему bash 4.3 сохраняет выделение памяти в скрипте
  • Печать переменной с обратной косой чертой в тире
  • 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

    Получить путь к текущему скрипту при выполнении через символическую ссылку

    Являются ли протоколы прикладного уровня частью библиотечных процедур?

    Как автоматически получить новый сервер имен в VPN-подключении

    Помимо crontab, какие другие способы можно добавить программы для запуска во время загрузки?

    Могу ли я получить полные возможности видео в гостевой книге Arch Linux в Virtual Box?

    Ядровое программирование зависает с моей загрузкой, но драйвер ATI требует этого

    BindAddress в конфигурации ssh на ноутбуке

    Диагностика файлового файла: я сделал правильный вывод о поврежденных файлах?

    Как отобразить терминал BASH X и графику в окне просмотра с разделом?

    iptables – почему я получаю «Таблица не существует (вам нужно insmod?)»

    Установить Gvim после vim

    Команда Openssl s_client всегда говорит 400 Bad Request

    Может ли awesome-wm передать нажатие клавиши в активное окно при определенных условиях?

    Откуда берутся переменные среды EDITOR, PAGER, BROWSER?

    Как добавить 100 МБ пространства подкачки в качестве логического тома в CentOS?

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