Загрузка файлов конфигурации при запуске зависит от того, какая среда рабочего стола используется. Если вы запустили свой xserver, набрав startx , это обычно будет означать, что он будет использовать .xinitrc (хранится в $ HOME).
Внутри .xinitrc вам нужно будет загрузить конфигурацию с различными сопоставлениями, например .xsessionrc
Затем вам понадобится следующая строка (в .xinitrc)
xrdb -merge ~/.xsessionrc
Однако, если вы используете менеджер входа в систему, например как LightDM или GNOME вам нужно будет найти такой же эквивалент
Комбинация echo
и xargs
здесь довольно любопытны.
basename
принимает путь в командной строке и выводит его последний компонент (то есть, как правило, часть после последней косой черты). xargs
просто помещает здесь слова, прочитанные со своего входа (конвейера), в командную строку basename
. Так почему бы просто не использовать basename $ 1
?
Однако есть разница.
В эхо 1 $ | xargs -n 1 basename
, если параметр $ 1
содержит пробелы, xargs
разделит его на пробелы и вызовет basename
для каждого слова отдельно. Конечным результатом будет то, что часть имени файла будет выбрана для всех слов, как показал Арминий .
Другой вариант, basename $ 1
, вызовет basename
только один раз (и не удастся некоторым приятным образом из-за разбиения слов.)
Если команда должна только обрабатывать одно имя файла, лучше было бы записать его как:
file=$(basename "$1" | cut -d '.' -f 1)
С кавычками. (или используя расширение оболочки с удалением суффикса $ {file %%. *}
вместо cut
, как Кусалананда показал .)
Если, на с другой стороны, он должен обрабатывать несколько имен файлов, может быть проще передать их с помощью массива или в позиционных параметрах (все они, а не только $ 1
).
Строка извлекает имена файлов без расширений из путей, предоставленных через $ 1
(первый аргумент сценария, в котором появляется эта строка). Результат сохраняется в переменном файле
.
Демо:
$ echo /etc/dhcpcd.conf ../foo/bar/filename.tar.gz | xargs -n 1 basename | cut -d '.' -f1
dhcpcd
filename
Строка сохраняет имя файла без расширения и пути в переменной $ file
.
Подробно:
echo $ 1
выводит первый аргумент командной строки, переданный скрипту, xargs -n 1 basename
передает отображаемую строку в качестве аргументов команде basename
, который удаляет путь из имени файла.
вырезать -d '.' -f1
удаляет расширение.
Так, например, если вы выполните
echo directory/test.sh | xargs -n 1 basename | cut -d '.' -f1
, результатом (сохраненным в $ file
) будет тест
.
Присваивает часть имени файла (возможно, с путем) переменной file
. В частности, бит перед первым .
символ в имени самого файла. Другими словами, он берет что-то вроде /some/path/hello.world
и анализирует бит hello
.
Советом будет запускать каждую часть конвейера в командной строке:
$ thing="/some/path/hello.world"
$ echo "$thing"
/some/path/hello.world
$ echo "$thing" | xargs -n 1 basename
hello.world
$ echo "$thing" | xargs -n 1 basename | cut -d '.' -f 1
hello
Обратные кавычки используются для возврата вывода конвейера и назначения его файлу
. $1
— это первый аргумент в командной строке (для любого скрипта или функции оболочки, частью которой он является).
Вероятно, единственная причина, по которой xargs -n 1 basename
используется вместо обычного basename
, заключается в том, что утилита basename
не читает стандартные ввод, но xargs
.
Более короткая (и более быстрая) версия того же самого в bash
или ksh93
будет
file=${1##*/}
file=${file%%.*}