Если вам требуется только общее разрешение на установку / запрет на установку пакета, перейдите в PolicyKit.
К сожалению, PolicyKit не имеет точного контроля над установленным пакетом. Если вы хотите дать своим пользователям разрешение на установку только ограниченного набора приложений, вы должны использовать sudo и установить что-то вроде программных каналов ...
Я также искал что-то подобное, но так как я сделал «Я ничего не нашел, я закодировал это« программные каналы »для простого решения», доступный здесь, в GitHub
. Это очень простая система, позволяющая обычным (не административным) пользователям устанавливать пакеты из ограниченных каталогов. [!d4 ]
Просто определите «каналы» (группы пакетов) в простом текстовом файле и дайте вашим пользователям разрешения запуска программных каналов.
Они будут видеть пакеты только в каналах, соответствующих их группам unix.
]Это работает:
if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fiЕсли вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.
Если вы хотите на самом деле поместить результат в переменную, используйте:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Включая мой тест, чтобы увидеть, действительно ли он работает:
rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test FailedНа части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).
sidenote: sdiff будет показывать бок о бок diff:
sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10Это работает:
if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fiЕсли вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.
Если вы хотите на самом деле поместить результат в переменную, используйте:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Включая мой тест, чтобы увидеть, действительно ли он работает:
rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test FailedНа части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).
sidenote: sdiff будет показывать бок о бок diff:
sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10Это работает:
if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fiЕсли вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.
Если вы хотите на самом деле поместить результат в переменную, используйте:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Включая мой тест, чтобы увидеть, действительно ли он работает:
rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test FailedНа части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).
sidenote: sdiff будет показывать бок о бок diff:
sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10Это работает:
if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fiЕсли вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.
Если вы хотите на самом деле поместить результат в переменную, используйте:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Включая мой тест, чтобы увидеть, действительно ли он работает:
rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test FailedНа части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).
sidenote: sdiff будет показывать бок о бок diff:
sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10Это работает:
if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fiЕсли вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.
Если вы хотите на самом деле поместить результат в переменную, используйте:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Включая мой тест, чтобы увидеть, действительно ли он работает:
rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test FailedНа части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).
sidenote: sdiff будет показывать бок о бок diff:
sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10Это работает:
if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fiЕсли вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.
Если вы хотите на самом деле поместить результат в переменную, используйте:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Включая мой тест, чтобы увидеть, действительно ли он работает:
rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test FailedНа части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).
sidenote: sdiff будет показывать бок о бок diff:
sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10Это работает:
if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fiЕсли вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.
Если вы хотите на самом деле поместить результат в переменную, используйте:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Включая мой тест, чтобы увидеть, действительно ли он работает:
rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test FailedНа части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).
sidenote: sdiff будет показывать бок о бок diff:
sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10Это работает:
if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fiЕсли вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.
Если вы хотите на самом деле поместить результат в переменную, используйте:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Включая мой тест, чтобы увидеть, действительно ли он работает:
rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test FailedНа части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).
sidenote: sdiff будет показывать бок о бок diff:
sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10diff может даже полностью отключить вывод, за исключением сообщения «Файлы / 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" ].
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
Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.
if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.
if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
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
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" ].
Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.
if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
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
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" ].
Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.
if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
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
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" ].
Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.
if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
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
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" ].
Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.
if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
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
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" ].
Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.
if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
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
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" ].
Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.
if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi