Начиная с RHEL6, они используют Upstart для запуска процессов при загрузке. Чтобы запустить два разных X-сервера, создайте 2 отдельных сценария для запуска вашего X-сервера на :0 и :1.
start_colon_0.sh:
#!/bin/sh
su - sit -c "startx -- :0 vt4 -layout Layout0 -seat seat0 -sharevts" &
start_colon_1.sh:
#!/bin/sh
su - sit -c "startx -- :1 vt4 -layout Layout1 -seat seat1 -sharevts" &
В /etc/init
создайте 2 файла конфигурации следующим образом:
x_server_0.conf:
start on stopped rc RUNLEVEL=5
stop on starting rc RUNLEVEL=[!5]
console output
respawn
exec start_colon_0.sh
x_server_1.conf:
start on stopped rc RUNLEVEL=5
stop on starting rc RUNLEVEL=[!5]
console output
respawn
exec start_colon_1.sh
Это запустит ваши скрипты при запуске при переходе на уровень запуска 5.
См. руководство Upstart
find. -name SHA1SUMS -exec sh -c '
cd "${1%/*}" &&
sha1sum --check --quiet "${1##*/}" 2>/dev/null |
while IFS= read -r file
do
printf "%s\n" "${1%/*}/$file"
done' sh {} \;
Его вывод должен соответствовать образцу, показанному в вашем вопросе, и он должен работать с произвольными путями.
В качестве альтернативы, использование awk
вместо функций оболочки для добавления SHA1SUMS
относительного пути к каждому имени файла:
find. -name SHA1SUMS -exec sh -c '
cd "${1%/*}" &&
sha1sum --check --quiet "${1##*/}" 2>/dev/null |
awk -v pre="${1%/*}" "{ print pre \"/\" \$0 }"' sh {} \;
Обратите внимание, что в зависимости от реализации sha1sum
может печатать измененные имена файлов. В частности, утилиты GNU *sum
экранируют некоторые символы 1 и в режиме проверки добавляют \
к именам файлов, которые необходимо экранировать, делая полученный путь конкатенацией относительного пути вашего SHA1SUMS
файла. и имя файла, напечатанное sha1sum
, непригодно для повторного использования.
1Руководство(sha1sum
ссылается на руководство md5sum
), в общем говоря, "каждый проблемный символ".
#! /bin/bash
here=$(pwd)
find. -name SHA1SUMS | while read -r fname; do
cd "$here" || exit
dirn=$(dirname "$fname")
cd "$dirn" || continue
sha1sum --quiet --check SHA1SUMS 2>&1 | grep " FAILED" | ( echo -n "$dirn/"; cat )
done > logfile
Это сломается, если у вас есть каталоги, содержащие \n
, но это крайне маловероятно.
Попробуйте это:
find. -name SHA1SUMS -execdir \
sh -c 'sha1sum --quiet -c "$@" | sed "s|^|$PWD/|"' - {} +
Если каталоги действительно содержат |
, вы можете использовать какой-либо другой символ в замене sed или использовать вместо него awk -v p="$PWD/" "{print p\$0}"
.
Если ваши пути действительно содержат новые строки , вам нужно что-то поумнее этого ;-)