Bash: Какая польза от типа (встроенные функции Bash)?


16

Я наткнулся на команду в скрипте Bash, в которой я нашел:

find /var/log/abcd -type f

Вышеупомянутая команда была в контексте очистки файлов журнала. Я знаю , что findделает.

После того , как увидел -type f, я просмотрел страницу руководства для него. Я увидел это на странице руководства BASH_BUILTINS (1)

Описание флага -f под typeкомандой: -

The -f option suppresses shell function lookup, as with the command builtin.

Ниже приведены мои вопросы:

  1. Какая польза от type?
  2. Какое значение -fфлага?
  3. Какая польза от использования typeс findкомандой?

[EDIT]: - После того , как прочитал все комментарии и ответы до сих пор, я хотел бы упомянуть причину моего неправильного толкования -type option in command findVs type command. Все это произошло потому, что я предполагал, что до даты видел только короткие варианты (тесты в случае findкоманды) с одним знаком минус «-» , например ls -l,. В большинстве случаев я видел длинные варианты с двойным знаком минус «-» , например ls --version,.


1
typeКоманда встроенный не используется find. -typeВариант findделает что - то еще. Смотрите help typeи man findполучите ваши ответы.

1
Эта конкретная неправильная интерпретация очень специфична и вряд ли поможет другим в качестве вопроса
— Anthon

9
Зачем понижать? Хотя этот вопрос показывает, что OP мало что знает о Unix, неправильно утверждать вопрос по этим причинам. Акшай даже зашел так далеко, что прочитал справочную страницу, которую большинство людей, задающих вопросы, здесь не делают.
— Стефан Шазелас

пожалуйста, попробуйте перефразировать заголовок вашего вопроса, потому что ваш текущий заголовок мешает людям, которые действительно ищут использование встроенного в bash 'type', получить точный ответ ..
— Sajuuk

Ответы:


21

В этом случае не typeимеет ничего общего со встроенным bash type, но об этом позже.

Немного о "типе"

Встроенная typeкоманда BASH предоставляет вам информацию о командах. Таким образом:

$ type type
type is a shell builtin

Синтаксис:

type [-tap] [name ...]
  • -t: печатать только тип, если найден
  • -a: печатать все вхождения команды, как встроенные, так и другие.
  • -p: распечатать файл на диске, который будет выполнен при вызове команды, или ничего.

Если мы посмотрим time, killи catв качестве примера:

$ type time kill cat
time is a shell keyword
kill is a shell builtin
cat is /bin/cat

$ type -t time kill cat
keyword
builtin
file

$ type -a time kill cat
time is a shell keyword
time is /usr/bin/time
kill is a shell builtin
kill is /bin/kill
cat is /bin/cat

$ type -ta time kill cat
keyword
file
builtin
file
file

Теперь это указывает, что если вы находитесь в оболочке Bash и вводите time some_cmd, используется встроенная команда bash time. Для использования системы timeвы можете сделать /usr/bin/time some_cmd.

Одним из способов, который часто используется для обеспечения использования системной, а не встроенной команды, является использование which.

tt=$(which time)

а затем использовать $ttдля вызова системы time.


Команда, о которой идет речь

В этом случае -typeэто опция команды find. Опция принимает один аргумент, по которому указывается тип объекта. пример

find . -type f  # File
find . -type d  # Directory

Есть еще, проверьте man findна остальное.

Для поиска конкретной опции вы можете сделать (пока в человеке):

/ ^ \ S * -типаEnter

Затем используйте nдля следующего, пока не найдете его.


Немного о командной оболочке

Это немного личной интерпретации.

В данном конкретном случае стоит упомянуть некоторые команды, опции, аргументы и каналы.

Это несколько свободно используется, но в моем словарном запасе мы имеем вкратце:

  • Команда: программа или встроенная .
  • параметр: сущность после командного слова.
  • опция: необязательный параметр.
  • Аргумент: обязательный параметр.

В спецификации команды квадратные скобки используются для указания параметров и, по выбору, меньше / больше, чем используются для указания аргументов. Таким образом:

foo [-abs] [-t <bar>] <file> ...
foo [-abs] [-t bar] file ...

Выдает -a -bи -sкак необязательные параметры, так и fileобязательный. -tнеобязательно, но если указано, принимает обязательный аргумент bar. Точки показывают, что это может занять несколько файлов.

Это не точная спецификация, и часто manили helpтребуется, чтобы быть уверенным.

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

chmod -R nick 722 foo
chmod nick 722 foo -R

Оба работают на некоторых системах, в то время как последние не работают на других.


В вашей точной команде все параметры принадлежат find- таким образом, если вам интересно, какое свойство man findявляется правильным местом для поиска. В тех случаях, когда вам нужно просмотреть справочные страницы по оболочке и т. Д., Например:

find . $(some command)
find . `some command`
find . $some_var
find . -type f -exec some_command {} \;
find . -type f | some_command
...

-execЯвляется особенным , где -exec some_command {} \;все параметры , данные find, но some_command {} \;часть расширена, в пределах findдо some_command string_of_found_entity.


Далее

  • квотирование
  • расширение
  • подстановка команд
  • и многое другое

Вы можете найти это полезным .


Очень информативно.
— Фредрик Гаусс

8

Вы должны смотреть man find, а не в help typeили man bash. typeв findукажите, какой тип файла вам нужен:

   -type c
          File is of type c:

          b      block (buffered) special

          c      character (unbuffered) special

          d      directory

          p      named pipe (FIFO)

          f      regular file

          l      symbolic link; this is never true if the -L option or the
                 -follow option is in effect, unless the symbolic link  is
                 broken.  If you want to search for symbolic links when -L
                 is in effect, use -xtype.

          s      socket

          D      door (Solaris)

И встроенный type- это совсем другое, и это НЕ тот, который используется внутри find.


0

Вы обратились не к той странице справочника, это не type -fкоманда, а find -type fопция, которая совершенно иная, обратитесь к findруководству за правильными объяснениями.


0

-type fуказывает find только печатать файлы типа f, то есть обычные файлы, а не каталоги, не символические ссылки и не файлы устройств. man findтогда ищите -fвариант.


0

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

man find

это скажет вам, что с -type fпомощью -typeпредиката выбираются только обычные файлы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.