Такие команды, как xmodmap
, могут выполняться только в X-окне,
Вы должны создать файл dot.desktop
в папке автозапуска xdg, например, создать файл ~/.config/autostart/startup.desktop
и поместить в него эти строки:
Exec=~/bin/startup.sh
Подробнее см. по этой ссылке
Ваша команда сработала бы, если бы вы избежали фигурных скобок (Я также процитировал $1
, который вы оставили без кавычек по неизвестным причинам):
$ set -- 3
$ echo 12345 | sed "s/^\(.\{$1\}\)/\1hi/"
123hi45
Модификатор повторения {n}
является расширенным модификатором регулярного выражения, который в базовом регулярном выражении записывается как \{n\}
. Утилита sed
по умолчанию использует базовые регулярные выражения.
Вы сэкономите несколько символов, переписав его как
echo 12345 | sed "s/^.\{$1\}/&hi/"
Лично я выбрал бы другой подход...
Вы хотите добавить строку hi
после третьего символа в 12345
, где «третий» задается значением в $1
.
echo 12345 | sed 's/./&hi/'"$1"
Когда $1
равно 3
, тогда выражение sed
будет выглядеть как
s/./&hi/3
Это заменит 3-е совпадение.
(любого символа )тем же самым символом (. Это то, что &
делает при замене ), за которым следует hi
.
Ввод цифры n
в конце команды s
в sed
подобным образом приводит к тому, что sed
заменяет n
:-е совпадение шаблона.
Тестовый запуск (с измененным вводом и заменой для удобства чтения):
$ set -- 3
$ echo abcde | sed 's/./&<hi>/'"$1"
abc<hi>de
$ set -- 4
$ echo abcde | sed 's/./&<hi>/'"$1"
abcd<hi>e
$ set -- 1
$ echo abcde | sed 's/./&<hi>/'"$1"
a<hi>bcde
У меня работает следующее:
#!/bin/sh
n=$1
echo 12345 | sed -r "s/(^.{$n})/\1hi/"
Это требует использования опции -r
для sed, чтобы указать расширенное регулярное выражение(-E
на macos ). Я не уверен, как ваш ввод будет передан в сценарий (12345
), поэтому я просто оставил его, как в вашем примере.