Если права на файл не 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 ; fi
result=$(./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
. sed -e '/\n\/\s/g'
Но почему ентер не меняется на пробел.
g
в конце имелось в виду 's/\n/ /g'
?\n
и следующую строку к уже прочитанной: speedtest --simple | sed '1d;N;s/\n/ /g'
Если я использую printf("asd"), то весь текст в кавычках будет выведен на экран и записан в лог файл. Вот такая команда: './a.out > file.log'.
./a.out > file.log
не выведет ничего на экран, всё будет перенаправлено в файл. но 2) сам printf об этом ничего не знает. Он выводит данные в поток стандартного вывода, куда они перенаправляются потом -- не его дело. 3) оператор >
перенаправляющий вывод -- это инструкция командной оболочке как запускать программу, к самой программе отношения не имеет.Есть ли какая другая команда вывода, которая будет текст выводить только в терминал, без записи в файл?
./a.out
, без каких-либо изменений в коде. Please specify the compatibility level in debian/compat or via Build-Depends: debhelper-compat (= X)
Искал в тексте упоминания debhelper-compat, но не нашел.
Build-Depends: debhelper-compat (= 13), texi2html, texinfo