Как лучше всего восстановить стрелки на моих полосах прокрутки?

Следующая функция будет использовать только созданный-ins Bash (в случае, если это, Вы хотите использовать Bash), чтобы сделать то, что Вы хотите:

foo () 
{ 
    local filename="$1"

    while IFS='|' read -r pre name suf; do
        l="$pre|${name#* },${name% *}|$suf";
        printf '%s\n' "$l";
    done < "$filename"
}

Переменная IFS установлена на |, и 'читайте', читает каждую строку за один раз из "1$" (Ваш файл) и делит его на три части, $pre$name и $suf, согласно значению IFS.

Значение $pre установлено, чтобы быть полем, прежде чем имя, $name будет установлен быть самим именем, которое Вы хотите подкачать (второе поле), и $suf является остальной частью строки.

Я использую Расширение Параметра (также поиск Расширения Параметра в man bash ) разделять поле $name.

"${name#* }" сократит имя, оставляя нас с фамилией.

"${name% *}" сократит фамилию, оставляя нас с именем.

Использование: нечто [/path/to/file.txt]

Демонстрационный вывод:

nylon100@~$ cat>file.txt
123|first1 last1|foo|bar|date|baz
456|first2 last2|foo|bar|date|baz
789|first3 last3|foo|bar|date|baz

nylon100@~$ foo file.txt
123|last1,first1|foo|bar|date|baz
456|last2,first2|foo|bar|date|baz
789|last3,first3|foo|bar|date|baz

8
02.09.2015, 01:51
1 ответ

Я бы предложил написать PID (в bash это в $! после запуска процесса) в файл из двух запускаемых процессов ( psdash и kegbot ).

Затем можно использовать ps --pid $ (cat yurepid) | tr -s '' | sed 1d | cur -d '' -f4 , чтобы проверить, действительно ли процесс выполняется.

В качестве побочного примечания следует всегда проверять, действителен ли PID в файле .pid , прежде чем действовать по нему!

Может случиться так, что какой бы механизм вы ни использовали для удаления файла .pid при остановке программ (обычно это либо часть самой программы, либо обертка shellscript) завершится сбоем, и в файле .pid появится "неправильный" PID. Если файл .pid выживет после перезагрузки, наихудшим сценарием будет PID другого процесса, над которым вы будете действовать.


OK, вот возможное решение, используя kegbot в качестве примера:

Сначала нужен сценарий-обертка. Для простоты предположим, что все происходит в вашем $ HOME .

Таким образом, простой оберткой ( run _ kegbot.sh ) будет:

#!/bin/zsh
kegbot runserver xxx.xx.x.xxx:8008
echo $! > kegbot.pid
wait
rm -rf kegbot.pid

Это одно решение, если kegbot разворачивается в фоновом режиме и т.д., но PID действителен после развилки. Я не знаю, может ли kegbot сам обрабатывать файлы PID, что облегчит вам необходимость обрабатывать файлы PID самостоятельно. Или, может быть, вы можете сделать kegbot не раскошелиться на задний план, а затем использовать саму оболочку (добавив & в конец строки 2), чтобы записать PID-файл и дождаться его завершения.

В любом случае, как только вы получите файл PID malarkey, вам нужно что-то подобное в вашем .profile :

[ -e kegbot.pid ] && {
    PID=$(cat kegbot.pid)
    COMM=$(ps -p $PID -o comm=)
    [ "x$COMM" != "xkegbot" ] && rm -f kegbot.pid 
}

[ -e kegbot.pid ] || screen -d -m ./run_kegbot.sh

Опять же, это просто одно решение проблемы, но общая идея состоит в том, чтобы использовать PID процесса, чтобы проверить, работает он или нет, и выше является одним из способов сделать это.

Некоторые демоны сохраняют свои PID-файлы в /var/run/, если kegbot и/или psdash делают это, очевидно, вам не нужен сценарий обертки и т.д., так как вы можете использовать эти PID-файлы напрямую.

Вам определенно нужно проверить, действительно ли PID внутри PID-файла является процессом, которому он принадлежит. Неправильная перезагрузка и/или сбой демона могут оставить зомбированный PID-файл и т.д. Вот для чего предназначен первый тест указанного выше файла PID.

-121--289139-

Как вы выяснили, Touch VNC работает в графическом режиме и часто является громоздким, медленным и непрактичным.

Когда вы говорите, что хотите иметь дело с выводом текста, вы можете использовать ssh на сервер и использовать screen (приложение текстового режима) для управления/повторного подключения к длительным выполняемым задачам. Если вы используете его разумно, у вас может быть несколько задач, выполняемых с одной и той же учетной записью.Экран также позволяет повторно подключиться в любое время из любого места, пока вход через ssh с той же учетной записью, которую вы использовали ранее для запуска задания.

Здесь имеется пара ссылок, объясняющих экран

https://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/ http://www.cae.tntech.edu/help/systems/unix/screen

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

screen -r

И вы вернетесь к экрану, который вы оставили.

Когда вы привыкнете, вы узнаете, что можете переключать несколько виртуальных экранов с различными комбинациями клавиш.

-121--228468-

Быстрое исправление, wfm:

cat <<HERE >~/.config/gtk-3.0/gtk.css
.scrollbar {
  -GtkScrollbar-has-backward-stepper: true;
  -GtkScrollbar-has-forward-stepper: true;
  }
HERE

Я пришел к этому после прочтения этого более вовлеченного решения, включающего редактирование системных тематических файлов: https://askubuntu.com/questions/200938/question-about-gtkscrollbar-class-in-custom-themes

10
27.01.2020, 20:11

Теги

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