Попробуйте без sudo
. Вы входите в корневой дом (/root
), а не в дом текущего пользователя(/home/[username]
). Это вызвано тем, что ~
и sudo
используются вместе, ~
направляет вас к домашнему директору пользователя, а sudo
устанавливает вас как суперпользователя (root ), поэтому ~
отправляет вас к корневому дому. Если вам нужно использовать суперпользователя, используйте весь путь к файлу. Вы получите тот же эффект, что и сейчас, выполняя:
sudo su
nano ~/[file path]
Было бы полезно добавить то, что вы используете.
Выполнение команд в bash
с включенным set -x
:
$ set -x
$ echo $( (( 5+5 )) )
++ (( 5+5 ))
+ echo
$ echo $((( 5+5 )))
+ echo 10
10
$ echo $(( ( 5+5 ) ))
+ echo 10
10
Как видите, $(...)
в первой команде воспринимается как подстановка команды. Эта подстановка команд запускает команду ((5+5))
. Это, в свою очередь, арифметическое вычисление, которое не имеет никакого вывода, поэтому echo
не получает никаких аргументов и просто выводит новую строку.
В другом случае (и в дополнительном случае, который я добавил ), $((...))
принимается как арифметическое расширение. При этом вычисляется значение (5+5)
и заменяется результатом этого вычисления.
Чтобы избежать путаницы, я предлагаю вам использовать пробелы, чтобы помочь синтаксическому анализатору bash
увидеть, какой тип синтаксической группировки вы хотите использовать, как я показал в последней команде выше.
$( (( 5+5 )) )
— это арифметическое выражение 5+5
внутри составной арифметической команды (( … ))
внутри замены команды $( … )
. Составная арифметическая команда не производит никакого вывода, поэтому результат подстановки команды пуст. Составные арифметические команды полезны только для присваивания (у этого нет присваивания )или для их возвращаемого значения (, которое здесь не используется ).
$((( 5 + 5 )))
или $(( ( 5+5 ) ))
— это арифметическое выражение ( 5 + 5 )
внутри арифметического расширения $(( … ))
. Результатом арифметического расширения является числовое значение (, отформатированное в десятичном формате ).