How to make/bin/ps, called with aux эксперт its argument, write to в file?

Is there в command line argument I хан pass to /bin/ps -aux to make it write its output to в file?


edit: To resimulate my issue:

  1. Open firefox
  2. Enable developer preferences (or эксперт shortcut install addon DevPrefs)
  3. Open Scratchpad by press Shift + F4
  4. In меню бар to go "Browser" меню and click on "Environment"
  5. Now in scratchpad code пасся this code, this code will find ps and then run it with command line options of aux and >PATH_TO_DESKTOP_me.txt

    var thisWin = Services.ww.activeWindow;
    var env = Cc['@mozilla.org/process/environment;1'].getService(Ci.nsIEnvironment);
    
    var psCommand = 'ps';
    var paths = env.get('PATH').split(':');
    var len = paths.length;
    for (var i = 0; i < len; i++) {
        try {
            var fullyQualified = new FileUtils.File(OS.Path.join(paths[i], psCommand));
            console.log('fullyQualified:', fullyQualified.path)
            if (fullyQualified.exists()) {
                var ps = fullyQualified;
                break;
            }
        } catch (e) {
            // keep checking PATH if we run into NS_ERROR_FILE_UNRECOGNIZED_PATH
        }
    }
    
    if (!ps) {
        console.error("Error: a task list executable not found on filesystem");
        thisWin.alert('Error: a task list executable not found on filesystem');
      throw new Error("Error: a task list executable not found on filesystem");
    }
    
    thisWin.alert('path to ps: "' + ps.path + '"');
    
    var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
    process.init(ps);
    
    var procFinned = {
        observe: function (aSubject, aTopic, aData) {
                thisWin.alert('ps completed');
        }
    };
    
    var filePathToOutputTo = OS.Path.join(OS.Constants.Path.desktopDir, 'me.txt');
    thisWin.alert('will write to file path: "' + filePathToOutputTo + '"');
    var args = ['aux', '>' + filePathToOutputTo];
    var a = process.runAsync(args, args.length, procFinned);
    
  6. Then press Ctrl + R to run the code, or хан do same from going to "Execute" меню and clicking "Run".

So the code launches ps process with is right here:

var args = ['aux', '>' + filePathToOutputTo];
var a = process.runAsync(args, args.length, procFinned);
  • Combinations tried:
    • with quotes: var args = ['aux', '>"' + filePathToOutputTo + '"'];
    • эксперт one array entryvalue with quotes var args = ['aux >"' + filePathToOutputTo + '"'];
    • эксперт one array entry with не quotes: var args = ['aux >' + filePathToOutputTo + ''];
2
задан 28 February 2015 в 04:37

3 ответа

С минимально касающимся JavaScript (с моей стороны), я предложил бы это:

Выполнение bash вместо ps - делает все поиски и проверки на bash и ps, и запускает процесс для bash с аргументами: -c, ps.path + ' aux > '+ filePathToOutputTo.

полная команда здесь должна быть похожей:

/bin/bash -c "/bin/ps aux > /path/to/output/file"
3
ответ дан 2 December 2019 в 01:33

Просмотр списка параметров командной строки, принятых ps в ps страница руководства (доступный там и путем выполнения man ps) показывает, что это не имеет опции для входа в файл. Много команд не делают. Но можно все еще заставить его сделать то, что Вы хотите.

Перенаправление с > или >>, как John1024 объясняет, отправляет стандартный вывод Вашей программы в файл или устройство, названное направо от >/>>. Это кажется, что это - то, что Вы хотите.

Однако, если Вы хотите записать вывод в файл и также видеть его сами в терминале, затем можно хотеть использовать tee утилита вместо этого.

ps aux | tee file

Это использование (| tee file) похож > file, но это показывает Вам ouput также. Если Вы хотите видеть вывод и добавить его в файл (вместо того, чтобы перезаписать), используйте -a флаг:

ps aux | tee -a file

То использование (| tee -a file) соответствует >> file.

Как делает tee работа?

tee копирует его стандартный вход, пишущий этому обоих в файл (или список файлов) данный как его параметры командной строки, и к стандартному выводу.

Обычно - то есть, когда программа или команда выполняются самым простым способом - его стандартный вход получен от пользователя. Это - то, что пользователь вводит как прогоны программы.

Но оператор канала, |, соединяет стандартный вывод команды слева от него, к стандартному входу команды направо от него. В примерах выше, это вызывает ps aux отправить его вывод во вход tee вместо к терминалу (и tee получить его вход от вывода ps aux, вместо от терминала).

tee затем записи, к чему это приняло обоих file и к терминалу.

Между прочим, одно общее использование каналов состоит в том, когда Вы будете ожидать, что вывод команды будет долог, и Вы хотите смочь перейти вверх и вниз в нем. Можно затем передать его вывод по каналу к less. Например: dmesg | less.

Перенаправление/передача по каналу вывода ошибок также.

Решения для перенаправления и передачи по каналу обсудили выше и в изменении ответа John1024, куда стандартный вывод идет, но они оставляют стандартную погрешность в покое. Таким образом, большинство сообщений об ошибках (и некоторые другие сообщения, в зависимости от программы) незатронуто - даже в ps aux > file, ошибки появятся на экране а не в файле.

Это обычно, что Вы хотите. И особенно в случае ps aux, маловероятно, что Вы хотите сообщения об ошибках в своем выходном файле - ошибки неожиданны, и Вы, вероятно, хотели бы видеть их сразу же. Ошибка, вероятно, представила бы файл, который Вы пытаетесь сделать неподходящим для Вашей задачи, так или иначе, предполагая, что Ваша цель состоит в том, чтобы произвести таблицу выполнения процессов и их характеристик.

Однако, если Вы действительно хотите, чтобы вывод ошибок рассматривался все равно как регулярный вывод, можно использовать &- снабженная суффиксом версия операторов перенаправления и передачи по каналу:

bash, интерактивная оболочка по умолчанию в Ubuntu, поддержки &операторы редактора. Это - оболочка, которую Вы используете, если Вы сознательно не переключились на другой, таким образом, для интерактивного использования (и для сценариев, где Вы знаете, что они будут выполнены с bash), можно определенно не стесняться использовать его.

Перенаправление/передача по каналу вывода ошибок также, на оболочках, которые не имеют &операторы редактора.

Некоторые оболочки (как dash, который обеспечивает sh на Ubuntu), не поддерживают их. В этом случае Вы получили бы ошибки как:

  • dash: 2: Syntax error: Bad fd number (при попытке использовать >& — напротив, &> и &>>, при неподдержке будьте интерпретированы как & > и & >>, которые делают что-то другое),
  • dash: 1: Syntax error: "&" unexpected (при попытке использовать |&)

При работе в оболочке, где >&, >>&, и |& не поддерживаются, можно отправить и стандартный вывод и стандартную погрешность посредством перенаправления или канала традиционным способом путем указывания отдельно, что стандартная погрешность является первой, чтобы быть перенаправленной к стандартному выводу.

Это достигается с 2>&1. (1 дескриптор файла для стандартного вывода, и 2 дескриптор файла для стандартной погрешности.)

Для перенаправления (т.е. когда требуется смочь использовать >& или >>&), помещенный 2>&1 в самом конце:

ps aux > file 2>&1
ps aux >> file 2>&1

Для канала (т.е. когда требуется смочь использовать |&), помещенный 2>&1 прямо перед | канал:

ps aux 2>&1 | tee file
ps aux 2>&1 | tee -a file
3
ответ дан 2 December 2019 в 01:33

Программы Unix обычно пишут свой вывод в "стандарт", также известный как stdout. Используя функцию оболочки перенаправления, stdout может быть отправлен в файл вместо терминала. Отправить его в имя файла file, использование:

ps aux >file

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

ps aux >>file

Между прочим, очень общее использование для перенаправления должно заставить подробную команду замолчать. Чтобы сделать это, можно перенаправить его вывод в файл /dev/null. Это - специальный файл, который выбрасывает любой вход, который Вы отправляете в него.

Работа со сценариями

Перенаправление может использоваться в рамках сценария:

#!/bin/sh
ps aux >file

С другой стороны, перенаправление может быть применено к выводу сценария в целом:

myscript >file

Можно также передать имя файла в как аргумент. Предположим это myscript состоит из:

#!/bin/sh
ps aux >"$1"

($1 сценарий-ese для первого аргумента на командной строке.) Затем можно работать:

myscript somefile

и ps aux команда будет перенаправлена к somefile.

2
ответ дан 2 December 2019 в 01:33

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

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