В то время как канонический способ решения этой проблемы включает пасту
, Здесь я предлагаю awk
альтернативу, где выходной разделитель записей устанавливается в пробел на нечетной и новой строках на четных строках
awk '{ORS=NR%2?" ":"\n";print}' file
-121--119412-
При поиске команд, вместо сопоставления имен двоичных файлов команд в качестве альтернативы можно сопоставить имена человеко-страниц; Это может иметь смысл, поскольку man
уже предоставляет эту функцию по умолчанию:
$ man --sections=1,8 --where --all --regex '^mkdi'
/usr/share/man/man1/mkdir.1.gz
/usr/share/man/man1/mkdirhier.1.gz
/usr/share/man/man1/mkdiskimage.1.gz
Использование sed
для извлечения только имен команд:
$ man --sections=1,8 --where --all --regex '^mkdi' | \
sed -r 's/.*\/([^/]+)\.[^.]+\.[^.]+$/\1/'
mkdir
mkdirhier
mkdiskimage
И выполнение , которые
для имен команд тоже:
$ man --sections=1,8 --where --all --regex '^mkdi' | \
sed -r 's/.*\/([^/]+)\.[^.]+\.[^.]+$/\1/' | xargs which
/bin/mkdir
/usr/bin/mkdirhier
/usr/bin/mkdiskimage
узоры являются регулярными выражениями, поэтому ^
добавляется для соответствия только в начале имени.
В синтаксисе образца, подобном оболочке glob, замените -regex
на --wildcard
,
как человек... --wildcard 'mkdi *' |...
.
В качестве функции оболочки:
whichmatch() {
man --sections=1,8 --where --all --regex "$@" |
sed -r 's/.*\/([^/]+)\.[^.]+\.[^.]+$/\1/' |
xargs which
}
используется как
whichmatch '^mkdi'
Для приблизительного совпадения имен команд , который
может использоваться вместо man
.
-121--77994-
Я думаю, что ваша лучшая ставка, вероятно, обернуть сценарий (например, сценарий оболочки) вокруг pacman, который заботится о настройке вещей.
В вашем вопросе отсутствуют некоторые детали, но я предполагаю, что ваш репозиторий недоступен из Интернета и только вашей локальной сети, но программное обеспечение лицензировано для каждого пользователя (а не для всего сайта), поэтому вам нужно ограничить, какие пакеты могут быть установлены разными пользователями.
CTRL + C Убивает оболочку, а также подпроцесс FreeFem, поскольку сигнал SIGINT отправлено на весь процесс на переднем плане. Поскольку оболочка не интерактивна, подпроцесс работает в той же группе процесса. См. Почему Сигинт не распространяется на детский процесс, когда отправляется в его родительский процесс? и Какова цель абстракций, сеанса, лидера сессии и групп процессов? для некоторого фона на процессы Отказ
Вы можете вызвать, чтобы оболочка не умереть, когда она получает SIGINT, установив ловушку для него. (Не игнорируйте сигнал: это также приведет к тому, что он будет игнорироваться подпроцессором.)
"shell_cmd": " gnome-terminal -x sh -c \"trap echo INT; FreeFem++ $file ; exec bash\""