Как удостовериться оболочка, встроенное эхо вызывается так, чтобы не видимый в списке процессов?

В то время как можно теоретически сделать это полностью в sed (так как это полно по Тьюрингу), это не правильный инструмент для задания.

Простой способ состоит в том, чтобы вставить вкладки в sed, затем выполнить последующую обработку их к пробелам. Если можно определить положение всех столбцов, передайте вывод sed по каналу через expand.

(Используйте литеральный символ табуляции вместо \t если Ваш sed не поддерживает \t.)

Если Вы не знаете ширины столбцов заранее, попробуйте BSD column утилита. Это смотрит на целый входной файл для определения ширины столбцов, которая размещает длину всех строк.

Если Ваш sed сценарий переписывает и закомментированные строки и незакомментированные строки, или если Вы используете column, Вам будет нужно немного последующей обработки для скоса закомментированных строк шириной маркера комментария.

… | sed '/^#/ s/ //'

Можно использовать awk вместо этого. Это имеет a printf функция. Как добавленная премия, существует простой способ защитить специальные символы такой как . или * в разыскиваемом содержимое столбца.

3
07.05.2013, 04:37
2 ответа

Просто вынудите это использовать встроенное:

builtin echo foo

Если echo не встроенное, это перестанет работать.

5
27.01.2020, 21:10
  • 1
    Спасибо @Chris одно сомнение.. будет этим допустимым для Linux только? или это будет работать в оболочках кроме удара? –  munish 06.05.2013, 10:30
  • 2
    @munish builtin не POSIX, но поддерживается в большинстве современных оболочек (удар, zsh, большинство реализаций ksh). –  Chris Down 06.05.2013, 10:37

Аргументы встроенному никогда не будут обнаруживаться ни в ком ps вывод, потому что встроенной не является отдельная программа со своей собственной командной строкой. Все современные оболочки (кроме некоторых очень упрощенных конфигураций BusyBox), включая все версии удара, имеют echo встроенный.

Обратите внимание на это, если Вы звоните bash -c "echo $password", затем пароль соберется для всех для наблюдения, потому что он встраивается в команду, с которой Вы работаете bash. Вызов оболочки только для вызова echo команда бессмысленна, так надо надеяться, Вы не делаете этого.

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

4
27.01.2020, 21:10

Теги

Похожие вопросы