Как я выполняю команду и получаю ее код выхода в меньшем количестве символов?

rvm use работы путем изменения переменных среды для указания, какая версия рубина должна использоваться. Это может только быть сделано, если это выполняется как функция. Если Вы выполняете его как команду, или при помощи полного пути или при помощи не наличия функции, определяемой, которая не может работать. Это вызвано тем, что, если выполнено, поскольку отдельный процесс, что процесс получает свою собственную копию среды, ту копию, изменяется, но сразу потерян, когда процесс выходит.

13
22.12.2014, 17:40
4 ответа

Вы можете использовать quote_command в качестве состояния теста.

while ! some_command; do sleep 1; done

Состояние останется правдой, если uvere_command выходит с ошибкой.

Или более многословный способ, если вы хотите выполнить дополнительные чеки:

while ! some_command
do 
    # add more if desired
    sleep 1
done
20
27.01.2020, 19:52

Похоже, что текст был закодирован в utf-8 (это хорошо, так как это стандарт для Unix), но затем что-то прочитало его как окна ISO 8859-1/Microsoft ® Latin-1 а затем вывести его интерпретацию. Вы должны обратить это вспять.

например.

echo "passer de très bonnes fêtes de fin d'année" | iconv --to-code="ISO 8859-1"

Это приведет к нарушенной кодировке и преобразованию ее в действительную utf-8. Если система настроена на utf-8, она будет считываться правильно.

Объяснение: Если мы делаем echo и | od -t x1 и echo к | od -t x1 , то мы видим, что шестнадцатеричные коды c3 a8 0a и c3 aa 0a , то мы смотрим здесь http://www.ascii-code.com/ (это изо 8859-1 коды, а не ascii) мы видим, что эти коды дают Г и Га , за которыми следует невидимый символ. Теперь мы знаем, что пошло не так: что-то читается utf-8, но интерпретируется как iso 8859-1. Теперь нам нужно обратить его вспять: мы читаем в том формате, в котором мы читаем, и преобразуем в iso 8859-1 (обратное то, что привело нас сюда). Результат действителен utf-8.

-121--111635-

После некоторых исследований я обнаружил, что использовать кавычки в определении ExecStart системного файла службы нормально. Что касается использования переменной оболочки, необходимо использовать фигурные скобки, чтобы уточнить, где заканчивается имя переменной, когда символы, не являющиеся пробелами, связаны с самой переменной.

В приведенном выше случае система должна рассматривать $ DOCKER _ USERNAME/redis в качестве имени переменной вместо $ DOCKER _ USERNAME . Добавьте фигурные скобки, чтобы правильно интерпретировать их.

Изменить : Дополнительную информацию о том, какой синтаксис является нормальным для systemd можно найти здесь: http://www.freedesktop.org/software/systemd/man/systemd.service.html#Command%20lines

В основном, большинство обозначений оболочки является нормальным, за исключением операторов труб.

-121--54412-

Именно для этого используется цикл до :

until some_command
do    sleep 1
done

Это логическое отрицание цикла в то время как .

В спецификации указано:

до цикл

  • Цикл до должен непрерывно выполнять один составной список , если другой составной список имеет ненулевой статус выхода.

  • Формат цикла until следующий:

    until compound-list-1
    do    compound-list-2
    done
  • Выполняется compound-list-1 , и если он имеет нулевое состояние выхода, команда до завершения . В противном случае выполняется составный список-2 , и процесс повторяется.
12
27.01.2020, 19:52

Вы можете просто сделать:

false
while [ $? -ne 0 ] ; do
   sleep 1
   some_command
done

это имеет недостаток, хотя он всегда спит одну секунду сначала

Если вы хотите иметь возможность выйти на любом из нескольких команд, чтобы выйти с 0 вы можете сделать :

while true; do
  if [ some_command ] ; then break ; fi
  if [ some_other_command ] ; then break ; fi
  sleep 1
done

что, конечно, также работает только для some_command

4
27.01.2020, 19:52

Внутри задних кнопок косая черта цитирует следующий символ. Таким образом, вы получаете выходные данные из команды

ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo $HOST_IS_ERPDB"

Вам нужно \\ вместо этого:

ERPTest=`ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \\$HOST_IS_ERPDB"`

, чтобы ERPTest был набор к выходным данным команды

ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB"

Или используйте $ (...) вместо устаревшего '...' . Обратите внимание, что в некоторых версиях AIX может потребоваться использовать /bin/sh или ksh93 вместо античного /bin/ksh .

ERPTest=$(ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB")
-121--186586-

Ответ заключается в том, что невозможно (если не скомпилировать собственный двоичный файл rsync ).

rsync всегда добавляется в файл журнала. Поэтому, как предлагается в комментариях, перед запуском rsync следует удалить журнал. Простой пример удаления журнала и последующего запуска rsync :

rm rsync.log; rsync [OPTION...] SRC... [DEST]

Это также может быть полезно:

  1. https://serverfault.com/questions/219440/rsync-via-cron-how-do-i-enable-logging
  2. https://superuser.com/questions/545642/is-it-possible-to-make-rsync-make-a-log-file-on-a-remote-system
-121--108454-

Ни пока!... , ни до... работает с системами, которые заморозили среду оболочки перед POSIX.1-2001. Это, однако, делает.

while :; do
    if some command; then
        break
    fi
    sleep 1
done

Если вам не нужна полная переносимость, зачем вы пишете сценарий оболочки? Perl более вероятно будет доступен, чем Bash.

sleep 1 while 0 != system qw(some command);

(Как указано выше, спящий режим выполняется только в случае сбоя команды.)

2
27.01.2020, 19:52

Теги

Похожие вопросы