Когда вы используете менеджер пакетов, вам не нужно сначала загружать, а затем устанавливать. Вы должны просто бежать:
sudo dnf install inkscape
Предположим, вы уже загрузили несколько пакетов локально и хотите их установить, тогда вы можете:
sudo dnf install /path/to/package.rpm
Если у вас есть каталог, полный пакетов, которые можно использовать для установки, вам следует преобразовать этот каталог в репозиторий (с помощьюcreaterepo
)и добавить его в dnf
в качестве репозитория...
псевдонимы — это просто замена текста перед очередным раундом интерпретации синтаксиса оболочки, они не принимают аргументы, поэтому после:
foo 69
Текст foo
заменяется на NUM=${1:-42}; echo $NUM
, а затем оболочка интерпретирует полученный текст:
NUM=${1:-42}; echo $NUM 69
$1
все еще не установлено, так чтоNUM=42; echo 42 69
Для встроенного скрипта, интерпретируемого в текущей оболочке и принимающего аргументы, вместо этого используйте функции :
foo() {
NUM=${1-42}
printf '%s\n' "$NUM"
}
Здесь используется ${1-42}
вместо ${1:-42}
, как если бы пользователь вызывал foo ''
, я бы предположил, что он хочет, чтобы $NUM
была назначена пустая строка.
How can I debug this kind of problem myself?
Один из стандартных шагов расследования — заглянуть под капот. и посмотреть, что происходит:
$ alias foo='NUM=${1:-42}; echo $NUM'
$ foo 69
42 69
$ echo "$NUM"
42
Несмотря на то, что вы определили псевдоним для эха $NUM
, вы должны сделать это самостоятельно, вручную. Выше показано, что для NUM
устанавливается значение 42. Это может дать вам подсказку, что аргумент "69" для псевдонима foo
не взаимодействует с заданием NUM=
; (очевидное? )вывод состоит в том, что это влияет только на echo
.
Небольшой общий совет: избегайте echo
в пользу printf
.
echo
может делать относительно неожиданные вещи, если первый аргумент начинается с дефиса (‘-
’ ), даже если оно происходит от переменной :$ NUM="In a perfect world..."
$ echo $NUM; echo ABC
In a perfect world...
ABC
$ NUM="-n a perfect world..."
$ echo $NUM; echo ABC
a perfect world...ABC
Также, конечно, вы должны заключать переменные в кавычки. echo
может делать странные вещи, если аргумент (s )содержит обратную косую черту (es ). printf
также обрабатывает обратную косую черту, но… printf
стандартизировано, но существует около 42 различных версий echo
. echo
не освещает границы между аргументами. echo Super User
и echo "Super User"
дают одинаковый результат. Так что попробуй:
$ alias foop='NUM=${1:-42}; printf "[%s]\n" $NUM'
$ foop
[42]
$ foop 69
[42]
[69]
$ foop The quick brown fox
[42]
[The]
[quick]
[brown]
[fox]
Это должно прояснить что ваш аргумент (s )применяется к концу псевдонима, и не запутаться в задании. Кроме того, код псевдонима не просто смотрит на первый аргумент.
Теперь, когда вы понимаете, что не контролируете псевдоним $1
, вы можете задаться вопросом, откуда берется значение для NUM
. Я не знаю, разумно ли ожидать, что вы подумаете об этом прежде чем вы полностью диагностируете проблему, но
$ set Once upon a midnight dreary
$ foo
Once
$ echo "$NUM"
Once
следует пояснить тот факт, что $1
в определении псевдонима просматривает существующий список аргументов оболочки, а не аргументы, которые передаются при вызове псевдонима.