Я закончил тем, что использовал ответ jordanms, но добавил мое собственное скручивание.
Поскольку я не хотел иметь все свои команды rhel6 вместе и все мои команды rhel5 вместе, но чередованный в их собственном разделе, и я не хотел должным быть копировать этот код каждый раз I wated для переключения, вместо этого я сделал это:
if grep -q -i "release 6" /etc/redhat-release ; then
rhel6only=1
elif grep -q -i "release 5" /etc/redhat-release ; then
rhel5only=1
else
echo "Running neither RHEL6.x nor RHEL 5.x !"
fi
Тем путем я мог сделать вещи как:
# JDK
[ $rhel5only ] && module load java/6
[ $rhel6only ] && module load java/7
# Eclipse
module load eclipse
# Python
[ $rhel5only ] && module load python/2
[ $rhel6only ] && module load python/3
и т.д.
Option 1:
Поскольку у вас есть наполовину настроенный mongodb-org-server
и распакованный, но (не настроенный) mongodb-org
, попробуйте выполнить следующую команду:
dpkg --configure mongodb-org-server mongodb-org
Если также не удается решить проблемы, связанные с зависимостями, попробуйте следующее:
dpkg --configure --force-depends mongodb-org-server mongodb-org
Option 2:
Поскольку конфигурация пакета, похоже, не будет завершена нормально Тем не менее, следующее довольно трудный способ сделать это, и я предлагаю вам сначала прочитать его и иметь в виду, что я на самом деле не тестировал его.
Сначала получите список файлов, установленных пакетами mongodb-org:
dpkg-query -L mongodb-org mongodb-org-server mongodb-org-mongos mongodb-org-shell mongodb-org-tools | grep "^\/[^\.]" > mongo.files
Затем проверьте содержимое файла mongo.files
(чтобы убедиться, что он содержит только пути, которые можно удалить), выполнив следующие действия:
less mongo.files
Затем удалите эти файлы из системы путем ввода:
rm `cat mongo.files`
Затем необходимо сообщить менеджеру пакетов, что эти пакеты в настоящее время не установлены в системе, изменив вручную /var/lib/dpkg/status
. Прежде чем делать что-либо с этим файлом, создайте резервную копию на случай, если что-то пойдет не так (помните, мы делаем операцию над внутренними данными менеджера пакетов...). Файл форматируется в секциях последовательных строк текста, разделенных пустой строкой. Найдите все разделы файла, начинающиеся с пакет: mongodb-org
, и удалите их (удалите все строки из строки, начинающейся с «Package», вплоть до пустой строки). По завершении сохраните файл и запустите apt-get update
, а затем apt-get install mongodb-org
.
Я, конечно, надеюсь, что это ничего не сломает и в конце концов вы получите функционирующую копию MongoDB.
-121--140045- Эти сообщения являются «отскоками». Обычно это происходит из-за того, что кто-то другой отправляет сообщение одному из ваших пользователей, и когда сообщение не может быть доставлено, почтовый сервер генерирует сообщение об отскоке. Вы можете передать их из обычных сообщений, потому что сообщения с отскоком всегда имеют отправителя конверта < >
.
В этом случае, как представляется, исходное сообщение содержало конверт отправителя < предмет @ bookingwidget.co.uk >
, и поэтому почтовый сервер пытается доставить информацию о сбое сообщения на этот адрес.
Вам нужно будет просмотреть одно из фактических сообщений, чтобы выяснить, каким было исходное сообщение и почему оно не может быть доставлено.
-121--167138- Проблема в том, что в операторе case
отсутствует тема - переменная, которую следует вычислить. Поэтому, вероятно, требуется следующее:
#!/bin/bash
cat <<EOD
choose one of the following options:
1) display all current users
2) list all files
3) show calendar
4) exit script
EOD
while true; do
printf "your choice: "
read
case $REPLY in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac
done
Здесь case
использует переменную по умолчанию $ REPLY
, которая читается
, когда ей не даны имена переменных (подробнее см. в справке
).
Также обратите внимание на изменения: printf
используется для отображения приглашения в каждом раунде (и не добавляет новую строку), cat
используется для печати инструкций на нескольких строках, чтобы они не переносились и были проще в чтении.
. Давайте попробуем изначально на один случай. Я буду использовать READ -P
для чтения пользовательского ввода в перемему opt
, а затем оператор Case, как показано ниже.
#!/bin/bash
read -p "choose one of the following options : \
1) display all current users \
2) list all files \
3) show calendar \
4) exit script" opt
case $opt in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac
Вышеуказанный скрипт работает нормально, и теперь я считаю, что вам нужно иметь его в цикле, чтобы вы могли прочитать ввод пользователя, пока пользователь не нажимает опцию 4.
, так что мы могли бы сделать это с помощью
петля, как показано ниже. Я устанавливаю вариабельную opt
с исходным значением в качестве 0. Теперь я итерацию в , в то время как
, в то время как POLOOP до тех пор, пока Privable opt
имеет значение как 0 (Вот почему я сбрасываю opt
переменную как 0, в конце корпуса
).
#!/bin/bash
opt=0;
while [ "$opt" == 0 ]
do
read -p "choose one of the following options : \
1) display all current users \
2) list all files \
3) show calendar \
4) exit script" opt
case $opt in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac
opt=0
done
Я бы лично поместил «пока» в начале кода. Если вы тогда следуете за ним с помощью :
, это позволит ему стоять как можно во много раз.
Вот как я бы написал это.
while :
do
echo "choose one of the following options : \
1) display all current users \
2) list all files \
3) show calendar \
4) exit script"
read string
case $string in
1)
who
;;
Затем несут вопросы и заканчиваются
esac
done
Давайте не забывайте Выбрать
:
choices=(
"display all current users"
"list all files"
"show calendar"
"exit script"
)
PS3="your choice: "
select choice in "${choices[@]}"; do
case $choice in
"${choices[0]}") who;;
"${choices[1]}") ls -a;;
"${choices[2]}") cal;;
"${choices[3]}") break;;
esac
done