Синтаксис замены команды, $ (), считал оператором или командой?

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

У меня он безупречно работает через плейлист...

Этот метод требует повторной компиляции SMPlayer и определенного метода именования файлов... Изменяется только одна функция в источнике SMPlayer, и 3 заголовка добавляются в один и тот же файл с единственным исходным кодом... Я составил smplayer _ 0,6,8 для Lucid... Maveric и Meerkat используют smplayer _ 0,6,9 .. Одна строка в более поздней версии отличается, но это ничего не расстраивает... Вот измененная функция и заголовки для smplayer _ 0,6,8

btw, диалог зениты в моем предыдущем ответе все еще используется для фиксации времени начала и окончания...

REMINDER - Следующие исходные сегменты предназначены для smplayer _ 0,6,8 ... Файл для изменения: ../smplayer-0.6.9/src/findsubtitles/osparser.cpp ... Новые сегменты одинаковы для '0,6.8' и '0,6.9', но оригиналы отличаются на одну строку (очень близко к концу; непосредственно перед окончательным возвращаемым гексашом; )


Добавьте этот первый блок строк непосредственно под существующими заголовками # include

// ====================
// fred mod begin block  
#include 
#include 
#include 
#include "paths.h"
// fred mod end block
// ==================

Вот измененная функция

QString OSParser::calculateHash(QString filename) {
    QFile file(filename);

    if (!file.exists()) {
        qWarning("OSParser:calculateHash: error hashing file. File doesn't exist.");
        return QString();
    }

    file.open(QIODevice::ReadOnly);
    QDataStream in(&file);
    in.setByteOrder(QDataStream::LittleEndian);
    quint64 size=file.size ();
    quint64 hash=size; 
    quint64 a;
    for(int i = 0; i < 8192; i++) {
        in >> a ; hash += a;
    };
    file.seek(size-65536);
    for(int i = 0; i < 8192; i++) {
        in >> a ; hash += a;
    };

  // =====================================================================
  // fred mod begin block
  //  
  // A mod to enable unique smplayer .ini files to be created for  
  //        content-identical media files whose file-names match
  //        a specific pattern based on two timestamps. 
  //        This is the naming pattern:

  //          
  //           name.[00:11:22].[33.44.55].mkv
  //              
  //        The two time stamps indicate the start and end  points of a 
  //         clip to be played according to  settings in the unique .ini
  //            
  //        The so named files can be, and typically will be, soft (or hard) links.   
  //        The "original" file can also named in this manner, if you like,    
  //        but that would make the "original" start playing as a clip,
  //          NOTE: soft links become invalid when you rename the original file.  
  //
  //  Note: For this system to work, you need to enable the following:
  //        In SMPlayer's GUI, open the Options dialog...
  //        In the  "General" tab... "Media settings"... 
  //          enable: 〼 "Remember settings for all files (audio track, subtitles...)" 
  //                     "Remember time position"   can be 'on' or 'off'; it is optional1
  //                                                but it is disabled for these clips.    
  //                     "Store setings in" must be: "multiple ini files" 
  //
  QFileInfo fi(filename);
  QString name = fi.fileName();
  //
  // ===================================================================
  // This RegExp expects a name-part, 
  //             followed by 2 .[timestamps]  (Begin-time and End-time)
  //             followed by a .extension
  //              
  //              .[ Begin  ].[  End   ]  
  //      eg. name.[00:11:22].[33.44.55].mkv
  //
  //    Note: The delimiter between each numeric value can be any non-numeric character.
  //          The leading dot '.' and square brackets '[]' must be as shown        
  //          HH, MM, and SS must each be 2 valid time-digits    
  //
  QRegExp rx("^.+"                      // NAME
             "\\.\\[([0-9][0-9])[^0-9]" // .[HH.
                   "([0-5][0-9])[^0-9]" //   mm.
                   "([0-5][0-9])\\]"    //   ss]
             "\\.\\[([0-9][0-9])[^0-9]" // .[HH.
                   "([0-5][0-9])[^0-9]" //   mm.
                   "([0-5][0-9])\\]"    //   ss]
             "\\.([^0-9]+)$");          // .EXTN
  //
  QString qstrIni;
  rx.setPatternSyntax(QRegExp::RegExp);
  if(rx.exactMatch(name)) {
      bool ok;
      QString qstrDlm(".");
      QString qstrBegEnd = rx.cap(1) + rx.cap(2) + rx.cap(3)
                         + rx.cap(4) + rx.cap(5) + rx.cap(6);
      hash += qstrBegEnd.toLongLong(&ok,10); // The UNIQUE-FIER
      //
      quint32 quiBegSec=(rx.cap(1).toULong(&ok,10)*3600)
                       +(rx.cap(2).toULong(&ok,10)*  60)
                       +(rx.cap(3).toULong(&ok,10));
      quint32 quiEndSec=(rx.cap(4).toULong(&ok,10)*3600)
                       +(rx.cap(5).toULong(&ok,10)*  60)
                       +(rx.cap(6).toULong(&ok,10));
      quint32 quiDifSec=(quiEndSec-quiBegSec);
      // 
      QString qstrBegIni = "-ss "     + QString::number(quiBegSec);
      QString qstrEndIni = "-endpos " + QString::number(quiDifSec);
              qstrIni    = qstrBegIni + " " + qstrEndIni;
  }
  // fred mod end block
  // =====================================================================
  // fred NOTE: the following 2 lines are a single line in smplayer-0.6.9

    QString hexhash("");
    hexhash.setNum(hash,16);

  // =====================================================================
  // fred mod begin block  
    if( !qstrIni.isEmpty() ) {
      // ** The next code line is not ideal, but should be okay so long 
      //    as SMPlayer's options are set to use Multiple .ini files.  
      //       The literal "file_settings" is HARDCODED, as It wasnt' straight
      //       forward to get the value, The rest of the path was easily available 
      //       without any significant mods, which "file_settings" would require.    
      // TODO: Check for Multiple .ini Option being enabled.
      //  
      QString  dir_settings = Paths::configPath() + "/file_settings";
      QString fqfn_settings = dir_settings + "/" + hexhash[0] + "/" + hexhash + ".ini";

      QSettings set(fqfn_settings, QSettings::IniFormat);
      set.beginGroup("file_settings");
      set.setValue(  "starting_time", "0" );
      set.setValue(  "mplayer_additional_options", qstrIni );
    }
  // fred mod end block
  // =====================================================================

    return hexhash;
}

-121--291822-

Скрытие того факта, что вы используете шифрование, очень сложно. Считайте, что некоторое минимальное программное обеспечение дешифрования (как в initrd) должно храниться где-то в виде обычного текста. Увидеть это и диск, полный случайных данных люди могут узнать.

Если вы не можете предотвратить это, вы также можете воспользоваться LUKS. Например, если у вас несколько пользователей, они могут иметь свой собственный пароль.

О режимах и алгоритмах шифрования. AES является наиболее широко используемым алгоритмом и поддерживает 128, 192 и 256 битовых ключей. Никто из них даже не близок к тому, чтобы быть сломанным. CBC означает цепочку блоков шифров. Его не следует использовать для шифрования диска, поскольку он уязвим для нанесения водяных знаков. Вместо этого используйте режим XTS . Essiv означает, что IV также является секретным. Это также предотвращает нанесение водяных знаков. SHA512 - алгоритм хеширования, используемый для генерации ключа шифрования из пароля. Считается безопасным.

Можно просмотреть loop-aes . Он не имеет заголовка, использует несколько ключей 64x256 бит и вы можете использовать внешний диск (как pendrive) для хранения ключей, зашифрованных вашим паролем. К сожалению, это требует исправления ядра.

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

-121--291780-

Рядом с OCR-Software, которая была моей первой идеей, я думаю о libaa1 (ascii-art) и связанных программах. Есть даже программа для просмотра телевизора в ascii-art, ttv, так что будет программа преобразования изображения, я почти уверен.

И я помню программу в пакете ImageMagick, где можно сделать фотографию флипчарта,и выполняет на нём ортез. К сожалению, я не помню название и не могу найти его снова - может быть, это не было частью ImageMagick, но что-то еще?

В 2003 году я создал это изображение: the artist as a young boy но, к сожалению, я не оставил никаких комментариев, как я его произвел. Так как я знаю foto, откуда он происходит, это может быть gimp-плагин тоже. Или я резко сократил цвета до 4, 8 или 16 и уменьшил разрешение до чего-то удобного для экрана, как 80x40, и работал с языком программирования вдоль пикселей, записывая разные символы для разных цветов, которые я затем обернул с кодами ANSI для производства цветов, и заменил знаки словами. Может, отчасти от руки, если я правильно помню.

0
29.08.2018, 21:22
3 ответа

Команда:

  • обычно имеет буквенно-цифровую строку в качестве имени.

  • является внешней утилитой, встроенной программой или функцией. Почти все, для чего встроенная команда typeпроизводит вывод, является командой в этом смысле.

  • имеет префикс в обозначении .

  • обычно изменяет какой-либо ввод-вывод.

Оператор:

  • обычно представляет собой символьную строку и может не иметь имени, но может иметь псевдоним.

  • не понимается встроенной командой type, (, если, возможно, не существует какой-либо функции или скрипта со сбивающим с толку названием ).

  • чаще имеет инфикс или суффикс синтаксис.

  • иногда управляет вводом-выводом, как регулировщик, но не меняет того, что находится в .

  • иногда руководит порядком процессов.

$()это команда замена:

  • в первую очередь, (или в последнюю очередь, в зависимости от того, как мы на это посмотрим ),это строка.
  • строка состоит из текста вывода тех команд, которые перечислены внутри.

[— встроенная команда оболочки:

  • это команда testс обязательным суффиксом ].

[[— ключевое слово оболочки bash:

  • Это похоже на более универсальную и быструю встроенную [, но SFAIK без соответствующей командыtest-like.
  • Ключевые слова оболочки
  • включают такие вещи, как timeи for, которые выглядят как команды, но ведут себя скорее как операторы, требующие различных ключевых слов того же уровня в качестве разделителей и синтаксиса. Этот код запускает встроенную функцию typeна выходе встроенной функции help, которая показывает список ключевых слов левой стороны -и встроенных функций :

    .
    COLUMNS=30 help -m | tail -n +9 | 
    tee >(cut -d ' ' -f2) >(cut -c 17-30 | cut -d ' ' -f1) > /dev/null | 
    sort | sed -n "s/.*/type '&'/e"';/found/!p'
    

Сравнение с разговорным языком:

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

Теоретически, операторы — это просто команды с другим синтаксисом, которые могут быть заменены похожими командами в стиле с префиксом вместе с остальными. Возможно, это будет не так удобно в использовании.

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

1
28.01.2020, 02:18

Текст в POSIX перечисляет его в разделе 2.6 Word Expansions , наряду с Tilde Expansion, Parameter Expansion, Arithmetic Expansion, Field Splitting, Pathname Expansion и Quote Removal Quote.

Точно так же в руководстве Bash он указан в разделе Shell Expansions .

Первый использует «оператор» для операторов перенаправления, а ;, &, |, &&, ||, (и т. д., так что это не один из них. Это также, очевидно, не команда, так что, как бы ни была важна терминология, я должен сказать, что это ни то, ни другое.

2
28.01.2020, 02:18

С точки зрения пользователя, подстановка команд является своего рода примитивом оболочки. Это функция, реализованная в оболочке, которая выполняет несколько действий (запускает подоболочку, выполняет команду... )и возвращает значение (вывод команды ). Прежде чем оболочка выполнит расширение, подстановка команды обычно является аргументом команды. Другими словами, пользователь получает результат процесса оболочки, используя функцию оболочки.

1
28.01.2020, 02:18

Теги

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