https://github.com/hhfeuer/nvhda#install-using-dkms решила мою проблему. Он использует ту же стратегию, что и выше, и Пинг, и я. Скорее всего, setpci -s 01:00.0 0x488.l=0x2000000:0x2000000 не работал с моей аппаратной настройкой.
if [ "$VAR1"| cut -c 7-18 = "GHIJKLMN.csv" ]; then
Что это значит, это выполнить [ "$VAR1" и передать вывод на cut -c 7-18 = "GHIJKLMN.csv" ]. [ потерпит неудачу, потому что для его последнего аргумента требуется ], а cut потерпит неудачу, потому что, вероятно, ни =, ни ] не являются файлами.
Я собираюсь угадать, что вы хотели:
if [ "$(echo "$VAR1" | cut -c 7-18)" = "GHIJKLMN.csv" ]; then
Обратите внимание, как я завершаю команду в "$()". Это заставляет его выполнять и заменять свое место выходом. Цитаты важны, поэтому вывод не разбивается на несколько аргументов для [.
Следуя тому, что я считаю лучшим методом для bash, я бы рекомендовал сделать это вместо:
Это позволяет избежать специальной интерпретации $VAR1 эхом (в зависимости от содержимого, может быть ошибкой для опций) и вызова 2 ненужных исполняемых файлов, [ и echo. Что-то особенное, чтобы отметить здесь, что вам действительно не нужны никакие цитаты, которые я использовал. [[ является специальным синтаксисом bash, и даже если подстановка имела пробелы, bash не разбивал бы на слово. Это также не раскололо бы то, что было дано <<<. GHIJKLMN.csv не имеет пробелов или специальных символов, так что это тоже будет хорошо.
Вы также можете пропустить вызов cut, выполнив следующее:
if [[ "${VAR1:6:12}" = "GHIJKLMN.csv" ]]; then
Теперь все выполненный в bash без выполнения какой-либо другой программы. В этом синтаксисе вместо того, чтобы указывать диапазон символов, который вы хотите, как и на cut, вы предоставляете смещение 0 на первый символ и количество символов, которое вы хотите. Это 7 - 1, потому что индексы cut начинаются с 1 и 12, потому что диапазон 7-18 включен, поэтому 18 - 7 + 1.
Я только что увидел, ваш $VAR1 равен [ F25]. Поскольку вы сократили до конца, вам не нужно указывать счет:
if [[ "${VAR1:6}" = "GHIJKLMN.csv" ]]; then
if [ "$VAR1"| cut -c 7-18 = "GHIJKLMN.csv" ]; then
Что это значит, это выполнить [ "$VAR1" и передать вывод на cut -c 7-18 = "GHIJKLMN.csv" ]. [ потерпит неудачу, потому что для его последнего аргумента требуется ], а cut потерпит неудачу, потому что, вероятно, ни =, ни ] не являются файлами.
Я собираюсь угадать, что вы хотели:
if [ "$(echo "$VAR1" | cut -c 7-18)" = "GHIJKLMN.csv" ]; then
Обратите внимание, как я завершаю команду в "$()". Это заставляет его выполнять и заменять свое место выходом. Цитаты важны, поэтому вывод не разбивается на несколько аргументов для [.
Следуя тому, что я считаю лучшим методом для bash, я бы рекомендовал сделать это вместо:
if [[ "$(cut -c 7-18 <<< "$VAR1")" = "GHIJKLMN.csv" ]]; then
Это позволяет избежать специальной интерпретации $VAR1 эхом (в зависимости от содержимого, может быть ошибкой для опций) и вызова 2 ненужных исполняемых файлов, [ и echo. Что-то особенное, чтобы отметить здесь, что вам действительно не нужны никакие цитаты, которые я использовал. [[ является специальным синтаксисом bash, и даже если подстановка имела пробелы, bash не разбивал бы на слово. Это также не раскололо бы то, что было дано <<<. GHIJKLMN.csv не имеет пробелов или специальных символов, так что это тоже будет хорошо.
Вы также можете пропустить вызов cut, выполнив следующее:
if [[ "${VAR1:6:12}" = "GHIJKLMN.csv" ]]; then
Теперь все выполненный в bash без выполнения какой-либо другой программы. В этом синтаксисе вместо того, чтобы указывать диапазон символов, который вы хотите, как и на cut, вы предоставляете смещение 0 на первый символ и количество символов, которое вы хотите. Это 7 - 1, потому что индексы cut начинаются с 1 и 12, потому что диапазон 7-18 включен, поэтому 18 - 7 + 1.
Я только что увидел, ваш $VAR1 равен "ABCDEFGHIJKLMN.csv". Поскольку вы сократили до конца, вам не нужно указывать счет:
if [[ "${VAR1:6}" = "GHIJKLMN.csv" ]]; then
if [ "$VAR1"| cut -c 7-18 = "GHIJKLMN.csv" ]; then
Что это значит, это выполнить [ "$VAR1" и передать вывод на cut -c 7-18 = "GHIJKLMN.csv" ]. [ потерпит неудачу, потому что для его последнего аргумента требуется ], а cut потерпит неудачу, потому что, вероятно, ни =, ни ] не являются файлами.
Я собираюсь угадать, что вы хотели:
if [ "$(echo "$VAR1" | cut -c 7-18)" = "GHIJKLMN.csv" ]; then
Обратите внимание, как я завершаю команду в "$()". Это заставляет его выполнять и заменять свое место выходом. Цитаты важны, поэтому вывод не разбивается на несколько аргументов для [.
Следуя тому, что я считаю лучшим методом для bash, я бы рекомендовал сделать это вместо:
if [[ "$(cut -c 7-18 <<< "$VAR1")" = "GHIJKLMN.csv" ]]; then
Это позволяет избежать специальной интерпретации $VAR1 эхом (в зависимости от содержимого, может быть ошибкой для опций) и вызова 2 ненужных исполняемых файлов, [ и echo. Что-то особенное, чтобы отметить здесь, что вам действительно не нужны никакие цитаты, которые я использовал. [[ является специальным синтаксисом bash, и даже если подстановка имела пробелы, bash не разбивал бы на слово. Это также не раскололо бы то, что было дано <<<. GHIJKLMN.csv не имеет пробелов или специальных символов, так что это тоже будет хорошо.
Вы также можете пропустить вызов cut, выполнив следующее:
if [[ "${VAR1:6:12}" = "GHIJKLMN.csv" ]]; then
Теперь все выполненный в bash без выполнения какой-либо другой программы. В этом синтаксисе вместо того, чтобы указывать диапазон символов, который вы хотите, как и на cut, вы предоставляете смещение 0 на первый символ и количество символов, которое вы хотите. Это 7 - 1, потому что индексы cut начинаются с 1 и 12, потому что диапазон 7-18 включен, поэтому 18 - 7 + 1.
Я только что увидел, ваш $VAR1 равен "ABCDEFGHIJKLMN.csv". Поскольку вы сократили до конца, вам не нужно указывать счет:
if [[ "${VAR1:6}" = "GHIJKLMN.csv" ]]; then
Это работает:
#!/bin/bash
echo 'Beginning of script'
VAR1='ABCDEFGHIJKLMN.csv'
if [ $(echo "$VAR1" | cut -c 7-18) == "GHIJKLMN.csv" ]; then
echo 'If condition triggered.'
fi
echo 'End of script'
Это также работает:
#!/bin/bash
echo 'Beginning of script'
VAR1='ABCDEFGHIJKLMN.csv'
VAR2=$(echo "$VAR1" | cut -c 7-18)
if [ "$VAR2" == "GHIJKLMN.csv" ]; then
echo 'If condition triggered.'
fi
echo 'End of script'
Это работает:
#!/bin/bash
echo 'Beginning of script'
VAR1='ABCDEFGHIJKLMN.csv'
if [ $(echo "$VAR1" | cut -c 7-18) == "GHIJKLMN.csv" ]; then
echo 'If condition triggered.'
fi
echo 'End of script'
Это также работает:
#!/bin/bash
echo 'Beginning of script'
VAR1='ABCDEFGHIJKLMN.csv'
VAR2=$(echo "$VAR1" | cut -c 7-18)
if [ "$VAR2" == "GHIJKLMN.csv" ]; then
echo 'If condition triggered.'
fi
echo 'End of script'
Это работает:
#!/bin/bash
echo 'Beginning of script'
VAR1='ABCDEFGHIJKLMN.csv'
if [ $(echo "$VAR1" | cut -c 7-18) == "GHIJKLMN.csv" ]; then
echo 'If condition triggered.'
fi
echo 'End of script'
Это также работает:
#!/bin/bash
echo 'Beginning of script'
VAR1='ABCDEFGHIJKLMN.csv'
VAR2=$(echo "$VAR1" | cut -c 7-18)
if [ "$VAR2" == "GHIJKLMN.csv" ]; then
echo 'If condition triggered.'
fi
echo 'End of script'