попробуйте
awk -F\| -v select="$var" '$2 == select { print $4;}' config_file
, где
$ var
содержит поле, которое вы хотите выбрать $2 = = select
select line, второй arg которой - «$ var» или select. {печать $4;}
печать четвертого поля. : command not found
Это означает, что команда, предоставленная в качестве условия в инструкции if, не найдена. Эта команда «»
является пустой последовательностью и поэтому не найдена; такой команды нет.
Согласно странице bash вручную, синтаксис оператора if должен выглядеть следующим образом:
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
Список представляет собой последовательность из одного или нескольких конвейеров, разделенных одним из операторы;, &, & & или | |, и, при необходимости, завершаются одним из;, &, или.
Таким образом, в приведенном выше операторе if выполняется список, и возвращается код выхода 127, а ошибка указывает на то, что команда не найдена. Затем это оценивается как ложь, поэтому выполняется блок else.
Может потребоваться следующее:
if false; then echo FOUND; else echo NOT; fi
-121--85882- Количество мест - это способ косметического разделения столбцов/полей. Это не имеет никакого другого значения. То есть , количество пробела между столбцами не имеет значения .
Пространство между столбцами состоит из пробелов (включая вкладки), а сами столбцы, например, разделенные запятыми параметры, не должны содержать пробелов без кавычек.
Со страницы fstab (5)
:
Поля[...] в каждой строке разделены вкладками или местами.
и
Если имя точки подключения содержит места, их можно удалить как '\040 '.
При следующем выравнивании линий с использованием только одной вкладки становится трудно достичь. В конце концов, fstab
без белого космоса выглядит более смешным, чем то, что вы считаете недовольным сейчас.
/dev/md3 /data/vm btrfs defaults 0 0
/var/spool/cron/crontabs /etc/crontabs bind defaults,bind
//bkpsrv/backup /mnt/backup-server cifs iocharset=utf8,rw,credentials=/etc/credentials.txt,file_mode=0660,dir_mode=0770,_netdev
Вы все еще видите «столбцы»?
Я думаю, было бы проще проверить, назван ли текущий tty как локальные консоли:
case $(tty) in
(/dev/tty[1-9]) PS1='console version';;
(*) PS1='not console version';;
esac
Это всего лишь один из способов проверить результат; вы можете использовать grep или расширение параметра, но это показывает идею.
Вы можете дополнительно проверить $DISPLAY
, но это не гарантия, и я не могу представить, что вы будете делать в командной строке, для которой потребуется среда X11.
Благодаря @Ignacio Vazquez -Abrams и @Jeff Schaller (и другим комментаторам ниже )я понял, что переменная окружения $DISPLAY мне нужна. Если вы находитесь на сервере отображения, значение, хранящееся в $DISPLAY , будет равно 0 , будет возвращено (как что-то ). Следовательно, следующий код (должен? )работает--
if [[ -n $DISPLAY ]];
then
PROMPT = (etc)
else
PROMPT = (etc2)
fi
Всем спасибо.
Когда вы работаете на консоли, вы сначала входите в систему.
Так что если вы ищете логин, вы можете знать, где вы находитесь.
Вы можете попробовать это:
[ "$(ps -t $(ps -o comm= -o tty= | \
awk '$1=="ps"{print $2}') | \
grep [l]ogin)" ] && \
echo "console" || echo "terminal"