Как сохранить вывод из команды (например, diff) в переменную

Если вам требуется только общее разрешение на установку / запрет на установку пакета, перейдите в PolicyKit.

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

Я также искал что-то подобное, но так как я сделал «Я ничего не нашел, я закодировал это« программные каналы »для простого решения», доступный здесь, в GitHub

. Это очень простая система, позволяющая обычным (не административным) пользователям устанавливать пакеты из ограниченных каталогов. [!d4 ]

Просто определите «каналы» (группы пакетов) в простом текстовом файле и дайте вашим пользователям разрешения запуска программных каналов.

Они будут видеть пакеты только в каналах, соответствующих их группам unix.

]
21
задан 13 August 2011 в 18:07

32 ответа

a) Вывод команды 1 может быть задан с помощью

output=$(diff "helloworld$x.out" "output/helloworld$x.out")

или с обратными окнами, но это не рекомендуется, потому что вы не можете их вложить, и их может быть трудно отличить от апострофов, в зависимости от шрифта:

output=`cmd1`

b) Вместо того, чтобы записывать в файл, а затем читать этот файл (или захватывать вывод, а затем эхом его), вы должны использовать прямой канал:

cmd1 > file cat file | cmd2 output=$(cmd1) echo "${output}" | cmd2

=>

cmd1 | cmd2

, но в вашем примере вы не заинтересованы в выходе, но результат программы - это сработало?

diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"

Чтобы прочитать об использовании & amp; & amp; и || найдите «ярлык AND и ярлык OR».

Чтобы сохранить вывод чистым, вы можете перенаправить вывод «diff» в никуда:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"

Чтобы получить успех и оценить это позже, вы сохраняете результат последней команды в переменной с $ ?:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null result=$? # do something else case $result in 0) echo success ;; *) echo failure ;; esac
6
ответ дан 7 August 2018 в 21:00

diff может даже полностью отключить вывод, за исключением сообщения «Файлы / bin / bash и / bin / sh differ» с использованием кода ниже.

file1="./helloworld$x.out" file2="./output/helloworld$x.out" if diff -q "$file1" "$file2"; then echo "Passed $x" else echo "Failed $x" fi

Если вы даже хотите скрыть это сообщение, вы должны добавить > /dev/null после команды diff, чтобы скрыть вывод diff:

if diff -q "$file1" "$file2" >/dev/null; then

/dev/null - это специальный файл, который действует как черная дыра, если вы пишете

Обратите внимание, что bash не нуждается в ; для завершения строк.

Что касается исходного вопроса, чтобы сохранить вывод программы в переменной:

file1="./helloworld$x.out" file2="./output/helloworld$x.out" output="$(diff -q "$file1" "$file2")" # the quotes are mandatory, this checks whether $output is empty or not if [ -n "$output" ]; then echo "Passed $x" else echo "Failed $x" fi

Альтернативные способы проверки, является ли переменная пустой:

[ "$output" = "" ] [ "$output" == "" ] [[ "$output" == "" ]] [[ $output == "" ]]

re, используя Bash, последние две команды рекомендуются для сравнения строк. В противном случае рекомендуется использовать первый и [ -n "$output" ].

17
ответ дан 7 August 2018 в 21:00

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

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