Как ... автоматически запускать bash скрипт после загрузки ядра linux?
/etc/inittab или добавлением файла с именем вида S[0-9][0-9]* в /etc/init.d (если busybox), либо добавлением юнита systemd если systemd.С помощью buildroot
выводится ошибка - [: missing `]'
Что значит эта ошибка
if [ "$projectDir" == "video" && "$flag" != "noflag" ]; then следующим образом: ключевое слово if, команда [ с аргументами "$projectDir" == "video", оператор &&, команда "$flag" с аргументами != "noflag" ], разделитель ;, оператор then.[ (она же test), очевидно, не нашла в своих аргументах закрывающей скобки ], которая должна там быть при таком её вызове.как ее можно исправить?
-a вместо &&, как говорит man test. Если записать вывод данных в файл
# /opt/speedtest/speedtest | tee spdt.log
то в файле не видно промежуточных значений значений.
strace -f -e ioctl,write -o log <program command line>myvar=$(find "/tmp/folders" -iname "App *" -type d -maxdepth 1) count=${#myvar[@]} echo $count
И в ответ получаю число 120, которое означает количество символов, а не строк
2. Почему в моем примере выводится количество символов в переменной, а не количество строк?
${#myvar[@]} -- это длина массива. Если идея была создать в первой строке массив из имён файлов, то там не хватает пары скобок:myvar=( $(find "/tmp/folders" -iname "App *" -type d -maxdepth 1) )${#myvar[@]} выведет длину этого массива, т.е. количество строк в нём. 1. Реально ли подсчитать количество строк в файле или переменной с помощью глобов, как показано тут - https://stackoverflow.com/a/32727260 ?
wc -l. Если права на файл не go-rwx
go-rwx, эта запись означает "отнять rwx у g и o". Разрешения могут быть u=rw,go=. Получить их можно например так: stat -c %A /etc/shadow, а проверить условие -- командой test, например: if [ `stat -c %A /etc/shadow` != "-rw-------" ], или командой grep, например: if ! stat -c %A /etc/shadow | grep -q '^....------$'.chmod go-rwx /etc/shadow. Как я могу данные из них подставить в echo, сохранив при этом функционал запроса?
eval "echo {$A1}.{$A2}.{$A3}"eval применяет функциональность shell к произвольной строке. как перенаправить информацию из вывода команд в файл, который создается в процессе проверки командой
#touch $( date '+%Y-%m-%d_%H-%M' )
…
file=$( date '+%Y-%m-%d_%H-%M' )
touch "$file"
…
echo -e " Product Name : $PN_FRU" >> "$file"
… Есть ли способ из самого скрипта подменить сам скрипт чтобы он не портился?
cp или mv заменяет открытый интерпретатором файл, исходный файл не портится. Если интерпретатор взаимодействует с файлом через один и тот же файловый дескриптор, то никакого значения замена файла не имеет. Нужно разбираться с деталями того что портится, чтобы понять, как это пофиксить. Написали многоуровневое меню при помощи функций, работает без проблем все, кроме выхода.
Примерно на 2-3 уровне меню "Exit" не выходит из скрипта, а возвращается на уровень выше.
clear; ./1_1_ipmi_menu.sh ; unem ;;exit внутри скрипта 1_1_ipmi_menu.sh приведёт в возврату в unem, вы же тут отдельный процесс создаёте.exit в функциях приводил к выходу из приложения нужно импортировать (source) функции из этих скриптов и вызывать функции вместо запуска скриптов.#!/bin/bash
unem() {
read b
case $b in
1) clear ; … ; unem ;;
2) clear; PMI ; unem ;;
3) clear ; menu ;;
0) exit 0 ;;
esac
}
source 1_1_ipmi_menu.sh
source 1_1_system_menu.sh
unem С чего начинать разбираться?
дамп postgres, после чего, если комманда с дампом выполнилась…
pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz EXIT_STATUS=$? if [[$EXIT_STATUS -eq "0"]]
if pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz$? -- это статус завершения последней команды, а у вас там пайплайн и последняя команда -- gzip. Статус завершения именно pg_dump не проверяется, ни первым вариантом, ни вторым. --to-command -- это прикольно.tar -xzvOf archive.tar.gz | tar -xzvO | tar -xzvO | … | tar -xzvO | tar -xzv как все-таки правильно сверить, должно быть 100 процентное совпадение с эталонным файлом в результате команды должна быть 1.
./test.sh | if cmp -s - test ; then echo 1 ; else echo 0 ; firesult=$(./test.sh)| cmp -s $result test
test.sh с содержимым файла test, но здесь не нужен конвейер и cmp так не работает.cmp -s (./test.sh) test
cmp -s <( ./test.sh ) test. Но из-за того, что конструкция <(…) специфична для bash этот вариант на мой взгляд менее предпочтителен чем вариант ./test.sh | if cmp -s - test.