Префикс с шеллскриптом проверять
Шеллскрипт проверять
, который можно использовать в качестве префикса для любой командной строки, может выглядеть так:
#!/бин/баш
если [ "$1" == "--debug" ]
тогда
отладка = истина
сдвиг
еще
отладка=ложь
фи
"$@" и pid=$!
спать 0,1 # раз (с) до убийства
убить $pid 2> /dev/null
res="$?"
если $отладка
тогда
если [ $res -eq 0 ]
тогда
echo "убит по тайм-ауту: $@"
еще
echo "закончено изящно: $@"
фи
фи
Пример 1
$ ./check --debug bash -c "пока верно;выполнить дату '+%s.%N';спать 0,01;готово"
1634944386.589977656
1634944386.603126888
1634944386.616089924
1634944386.629058026
1634944386.642334480
1634944386.655644267
1634944386.668289318
1634944386.681058710
убит по тайм-ауту: bash -c while true;do date '+%s.%N';sleep 0.01;done
Пример 2
$ ./проверить --debug lsblk
НАИМЕНОВАНИЕ MAJ:MIN RM РАЗМЕР RO ТИП ТОЧКА КРЕПЛЕНИЯ
sda 8:0 0 238,5G 0 диск
ââsda1 8:1 0 500M 0 часть
ââsda2 8:2 0 139,4G 0 часть
ââsda3 8:3 0 1000M 0 часть
ââsda4 8:4 0 1K 0 часть
ââsda5 8:5 0 89,7G 0 часть /
ââsda6 8:6 0 8G 0 часть [SWAP]
sdb 8:16 0 3,7T 0 диск
ââsdb1 8:17 0 510M 0 часть
ââsdb2 8:18 0 30G 0 часть
ââsdb5 8:21 0 1M 0 часть
ââsdb6 8:22 0 100G 0 часть
ââsdb7 8:23 0 3,5T 0 часть /media/multimed-2
ââsdb8 8:24 0 5G 0 часть
sr0 11:0 1 1024M 0 ром
nvme0n1 259:0 0 232,9G 0 диск
âânvme0n1p1 259:1 0 232,9G 0 часть
âânvme0n1p2 259:2 0 1M 0 часть
закончил изящно: lsblk
Примитивная кастомная оболочка пш
Еще одна альтернатива, примитивная оболочка домашнего режима. пш
можно использовать и для этой цели.
Преимущество: вы можете запускать команды напрямую без каких-либо дополнительных префиксов.
Недостатки: Вы можете редактировать командную строку, но нет истории и у вас нет доступа к истории стандартной оболочки, например бить
, зш,
ткш`). Также отсутствуют некоторые другие функции стандартной оболочки.
Сценарий оболочки bash пш
и скрипт python3 приколоть
следует сделать исполняемым и скопировать, переместить или связать в каталог в ДОРОЖКА
, Например /USR/местные/бен
,
Начинать пш
, запустить команды и выйти из него с помощью выход
. Вход управляется приколоть
, который использует строка чтения
для того, чтобы можно было редактировать командную строку (более продвинутая, чем встроенная команда читать
из бить
).
пш
,
#!/бин/баш
tmpf=$(mktemp)
курдир = "$ (пароль)"
cmd=
пока правда
делать
# прочитать -p "psh:$curdir> " cmd 2>&1
# эхо "$cmd" > "$tmpf"
булавка "$curdir" "$tmpf"
# кошка "$tmpf"
cmd=$(кот "$tmpf")
если [ "$cmd" != "выход" ]
тогда
если [ "${cmd:0:3}" == "кд" ]
тогда
источник "$tmpf"
курдир = "$ (пароль)"
еще
источник "$tmpf" и pid=$!
спать 0,1 # раз (с) до убийства
убить $pid 2> /dev/null
фи
еще
сломать
фи
сделано 2> /dev/null
рм "$tmpf"
приколоть
,
#!/usr/bin/python3
из системного импорта argv
импортировать rlcompleter
импортировать строку чтения
readline.parse_and_bind("вкладка: завершена")
приглашение = 'psh:{0} > '.format(argv[1])
f = открыть (argv[2], 'w')
cmd = ввод (приглашение)
f.write('{0}\n'.format(cmd)) # запись в первый аргумент
Пример:
sudodus@bionic64 /media/multimed-2/test/test0/temp/PeterElbert $ psh
psh:/media/multimed-2/test/test0/temp/PeterElbert > while true; do date '+.%N'; sleep 0.008; done
.753302869
.763750113
.773720876
.783983502
.794652755
.805570413
.816651252
.827621482
.838553391
.849516607
psh:/media/multimed-2/test/test0/temp/PeterElbert > ls -l
всего 12
-rwxrwxr-x 1 судодус судодус 282 окт 23 01:18 проверить
-rwxrwxr-x 1 судодус судодус 255 окт 23 07:18 булавка
-rwxrwxr-x 1 судодус судодус 438 окт 23 07:51 пш
psh:/media/multimed-2/test/test0/temp/PeterElbert > cd ..
psh:/media/multimed-2/test/test0/temp > выход
sudodus@bionic64 /media/multimed-2/test/test0/temp/PeterElbert $