Пользовательское (редактируемое) сообщение для каждого пользователя после входа в систему

Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только имен файлов xxxxx_a.tif,

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt

, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда

sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh
[d2 ], чтобы запустить их все.

Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif. [!d3 ]

1
задан 17 May 2016 в 22:00

1 ответ

Сценарий ниже позволяет администратору хранить персонализированные сообщения в форме username_mm_dd_yyyy.txt в административном каталоге. Имя пользователя определяется автоматически и сопоставляется с именем файла и датой файла, который будет отображаться.

Сценарий также может иметь запись .desktop, которая должна быть помещена в каталог /etc/xdg/autostart. Это сделает скрипт отображаемым для каждого пользователя. В качестве альтернативы вы можете поместить файл .desktop в каталог каждого пользователя ~/.config/autostart.

#!/bin/bash
_get_username()
{
  qdbus  com.canonical.Unity  \
        /com/canonical/Unity/Session \
        com.canonical.Unity.Session.UserName
}

_get_date()
{
  date +%m_%d_%Y
}

_show_error()
{
  MESSAGE="Can't read the file or file doesn't exist. Contact the admin for assistance"

  zenity --error --title="Ooops, something went wrong!" --text="$MESSAGE"
}

main()
{
  # replace this with the actual directory 
  # that you want to use for storing messages
  MESSAGES_DIRECTORY="/tmp"

  # file name is made up of username_mm_dd_yyyy
  FILE="$MESSAGES_DIRECTORY"/"$( _get_username )"_"$( _get_date )".txt
  echo "$FILE"
  if [ -r "$FILE"   ] ; then
     zenity --text-info  --title="Welcome, $( _get_username )" --filename="$FILE"
  else
     _show_error
  fi
}

main

Ниже вы можете увидеть небольшую демонстрацию сценария в действии. Я создал файл в указанном формате в моей папке /tmp

6
ответ дан 23 May 2018 в 11:07
  • 1
    Извините, что заставил вас ждать. Он отлично работает. Мне нравятся кнопки «Отмена» и «ОК». Я использовал его с записью .desktop и отлично работает! – ankit7540 14 May 2016 в 10:25
  • 2
    @ ankit7540 Рад, что вам понравилось. Любые дополнительные функции, которые вы хотите добавить? – Sergiy Kolodyazhnyy 14 May 2016 в 10:27
  • 3
    Рассмотрим, что у пользователя есть папка, /home/message. Было бы неплохо скопировать последний файл сообщения и сохранить его для справки. – ankit7540 14 May 2016 в 10:33
  • 4
    @ ankit7540 можно сделать. Это просто вопрос добавления строки с командой cp, первым аргументом является копия администратора и второй аргумент /home/$( _get_username )/messages/$FILE.txt Мне нужно спать, но я могу добавить это утром. Это всего лишь одна строка. – Sergiy Kolodyazhnyy 14 May 2016 в 10:47
  • 5
    И если вы хотите связать файл, который просто cat $FILE >> /home/$( _get_username )/messages/Log_of_all_messages. txt – Sergiy Kolodyazhnyy 14 May 2016 в 10:51

Другие вопросы по тегам:

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