Я решил проблему, вызванную видеокартой, я просто добавил nouveau.modeset=0 в конец строки linux в grub
[
и test
— это одна и та же команда. Только [
ожидает, что его последний аргумент будет ]
(, который в противном случае игнорируется ).
Команды [
и test
часто реализуются одним и тем же двоичным файлом. Большинство Bourne -подобных оболочек и fish
имеют встроенные [
и test
. Оболочка C или rc
и их производные этого не делают. Оболочка C имеет специальные конструкции для выполнения некоторых операций, обычно выполняемых утилитой test
/ [
.
Команда test
появилась в Unix V7 в конце 70-х вместе с новой оболочкой Bourne. В предыдущих версиях не было команды test
, а в их оболочке не было конструкции if
. Но была автономная if
команда , которая могла выполнять некоторые из тех же тестов, что и test
, и выполнять команду в зависимости от результата.
Оболочка Bourne представила несколько операторов управления(if
/ while
/ until
), поэтому test
был введен в дополнение к этому, чтобы иметь команду, которую можно было бы использовать в части условия этих операторов для выполнения различные тесты.
В V7 не было команды [
, но вы можете найти некоторый незавершенныйзакомментированный код встроенной команды [
, предполагая, что они уже предусмотрели это к тому времени, но, вероятно, решил не загромождать им код sh
в то время.
[
и test
были добавлены в оболочку Bourne в System III в 1981 году .
Все Bourne -подобные оболочки, включая bash
, с тех пор имеют [
/ test
, встроенные, но обратите внимание, что хотя оболочка Almquist имеет [
/ test
, встроенную -из start (фактически слился с expr
), изначально он был отключен (и не компилировался в )в ранних BSD, а в некоторых — довольно поздно.
И [
, и test
являются стандартными командами POSIX . Они не должны быть встроенными, но должны быть исполняемыми из таких вещей, как env
, find -exec
, execvp()
и т. д., поэтому они должны быть доступны как автономный исполняемый файл.
Тем не менее, вы можете найти некоторые системы, которые предоставляют автономную test
утилиту, но не [
. Это объясняет, почему вы чаще видите такие вещи, как:
find. -exec test -f {} ';'
(эквивалентно GNU find
-xtype f
), чем:
find. -exec [ -f {} ] ';'
Что может привести к сбою в системах, не поставляющих автономную [
утилиту.
В качестве еще одного неподтвержденного различия между [
и test
, посколькуtest <any-string>
(так же, как [ <any-string> ]
), является допустимым тестом, который проверяет, является ли <any-string>
не пустым -, test --version
или test --help
не могут вернуть версию test
или ее использование. Однако [ --version
не является допустимым тестом, поэтому вы обнаружите, что автономная утилита GNU [
принимает --version
и --help
для возврата информации о версии и использовании соответственно вместо обычного сообщения об ошибке missing ‘]’
, когда GNU test
не (не видит соответствующую фиксацию от 2003 г.(вводящий в заблуждение комментарий исправлено в 2005 г.)).
$ '/usr/bin/[' --version
[ (GNU coreutils) 8.30
[...]
$ /usr/bin/test --version && echo "--version is non-empty"
--version is non-empty
$ '/usr/bin/[' --something-else
/usr/bin/[: missing ‘]’