Введите nmtui
на терминале; появится всплывающее окно -, в котором вы можете установить SSI и BSSID в соединении WiFi.
Содержимое .bashrc
выполняется самим Bash точно так же, как он выполняет скрипты или что-либо, что когда-либо загружается в интерактивную оболочку. Это вариант языка оболочки POSIX с рядом расширений (, некоторые из которых заимствованы из других оболочек, в основном Ksh, некоторые созданы самим Bash ).
Здесь function cd_up() {... ; }
определяет функцию. Стандартной формой для этого будет просто cd_up() {... ; }
без ключевого слова function
. $(...)
- это подстановка команды, она запускает команду внутри и помещает ее вывод в качестве аргументов командной строки.
printf "%0.s../"
— это хитрость. printf
принимает строку формата, аналогичную функции C printf()
, и ряд аргументов для печати с использованием этой строки формата. Важно отметить, что она также повторяет строку формата столько раз, сколько необходимо для использования всех аргументов (, которые функция C не использует и не может использовать ). Спецификатор %0.s
предписывает печатать аргумент в виде строки с нулевой шириной, поэтому на самом деле аргументы печатаются , а не .
Но постоянная часть../
печатается один раз для каждого аргумента, что означает, что printf "%0.s../" a b
будет печатать его дважды и т. д. $(seq 1 $1)
— это еще одна подстановка команды, и поскольку seq
печатает список чисел, он используется для предоставления необходимого количества аргументов для printf
. $1
— первый аргумент текущей функции cd_up
.
Итак, напр. cd_up 2
, сначала запустит seq 1 2
, что напечатает 1 2
. Это передается в качестве аргумента printf
, поэтому вы получаете printf "%0.s../" 1 2
, который печатает ../../
. Это передается в cd
, и cd../../
запускается, поднимаясь на два уровня вверх в дереве каталогов.
С помощью set -x
вы можете увидеть команды, которые на самом деле выполняет оболочка. Bash даже указывает уровень вложенности с помощью знаков +
:
/tmp/foo$ set -x
/tmp/foo$ cd_up 2
+ cd_up 2
+++ seq 1 2
++ printf %0.s../ 1 2
+ cd../../
/$
Обратите внимание, что на самом деле не имеет значения какой вывод seq
, важно лишь то, что в нем правильное количество слов. Поскольку подстановки команд не заключены в кавычки, вывод проходит через разбиение на слова ,это означает, что он разделен пробелами на несколько аргументов. printf "%0.s../" "$(seq 1 $1)"
всегда будет передавать только один аргумент после строки формата. (См. примеры на связанной странице.)
Другой способ написать подобную функцию с меньшими хитростями — это простой цикл. Почти в POSIX sh(local
не является POSIX):
cd_up() {
local i=$1
while [ "$i" -gt 0 ]; do
cd..
i=$((i - 1))
done
}
или в Bash/Zsh, используя арифметический цикл for:
cd_up() {
local i
for (( i=$1; i > 0; i-- )); do
cd..
done
}
Хотя версия с printf
лучше тем, что она запускает cd
только один раз, поэтому cd -
возвращается обратно в исходный каталог, а не в -между ними. (Исправление, оставленное в качестве упражнения.)
Ресурс по языку оболочки см., например.
bashrc — это сценарий bash, который запускается всякий раз, когда bash запускается в интерактивном режиме.