Вот довольно типичный синтаксис. Это может привести к еще одной проверке ошибок, но в рамках того, что вы хотите сделать, я полагаю, это поможет вам в правильном треке:
#!/bin/bash
file=/etc/hosts
if [ -z "$1" ]; then
echo Usage: $0 name 1>&2
exit 2
fi
if grep -q "$1" $file ; then
echo "$file" contains $1
else
echo "$file" doesn\'t contain $1
fi
тест
( если [-z «$1»]; тогда...
) имеет значение true, если $1
(первый аргумент командной строки) является пустым рядом (или не был предоставлен). Использование:
выводится на stderr
с 1 > и 2
grep
скрыт (за исключением выходных данных об ошибках, которые вы, вероятно, захотите увидеть), поскольку в этом
grep
имеет параметр -q
, который замалчивает все выходные данные, что является лучшим выбором здесь, но не все команды имеют «тихий» переключатель. В этих случаях вместо этого можно использовать >/dev/null
, как в приведенном ниже примере. $?
Вы специально попросили пример с $?
. Вместо вышеуказанного , если grep...
конструкция, мы действительно могли бы разделить это на отдельные утверждения:
# grep -q "$1" $file would work just as well, here (better, maybe!):
grep "$1" $file >/dev/null
if [ $? -eq 0 ]; then
echo "$file" contains $1
else
echo "$file" doesn\'t contain $1
fi
Важно отметить, что тестирование $?
должно происходить сразу после рассматриваемой команды, так как любые другие команды (за исключением некоторых построений оболочки) приведут к перезаписи значения.
$?
$?
- это просто код выхода последнего процесса (команды), выполненного оболочкой. По соглашению код выхода 0
является успешным (хотя, как и в случае большинства конвенций, существуют исключения). Более высокие коды выхода могут иметь различные значения, специфичные для приложения, но обычно ненулевые означает какой-то ненормальный выход. Для получения дополнительной информации см. документацию по команде.
-121--216551-
Откройте терминал и запустите
sudo apt-get update; sudo apt-get модернизации
Ответ Y на все вопросы. В моем случае проблема исчезла.
-121--228592-
Как уже упоминалось, в этом потоке много путаницы. Исходный вопрос заключается в том, какой диспетчер дисплея, а не диспетчер рабочего стола или диспетчер окон. В настоящее время я работаю Xfwm4 который является диспетчером окон Xfce, и lxdm, который является легким диспетчером отображения X11 (от LXDE, а не Xfce). Вы должны видеть, какой диспетчер дисплея вы используете через htop. Вероятно, вы уже давно нашли ответ за последние 4 года:)
Если видео закодированы с использованием одних и тех же кодеков, вы можете использовать оператор concat
.
If you have media files with exactly the same codec and codec parameters you can concatenate them as described in "Concatenation of files with same codecs". If you have media with different codecs you can concatenate them as described in "Concatenation of files with different codecs" below.
$ cat build_ffmpegs.bash
#!/bin/bash
intro=/home/intro/play.mp4
outro=/home/intro/play.mp4
cd /home/vid
for i in vid*; do
ffmpeg -f concat -safe 0 \
-i < <(printf "file '%s'\n" $intro $(readlink -f $i) $outro) \
-c copy /home/vid2/output_${i}
done
Запуск этого приведет к созданию ffmpeg
таких команд:
ffmpeg -f concat -safe 0 -i < <(printf "file '%s'\n" /home/intro/play.mp4 /home/vid/vid1.mp4 /home/intro/play.mp4) -c copy /home/vid2/output_vid1.mp4
ffmpeg -f concat -safe 0 -i < <(printf "file '%s'\n" /home/intro/play.mp4 /home/vid/vid2.mp4 /home/intro/play.mp4) -c copy /home/vid2/output_vid2.mp4
ffmpeg -f concat -safe 0 -i < <(printf "file '%s'\n" /home/intro/play.mp4 /home/vid/vid3.mp4 /home/intro/play.mp4) -c copy /home/vid2/output_vid3.mp4
ffmpeg -f concat -safe 0 -i < <(printf "file '%s'\n" /home/intro/play.mp4 /home/vid/vid4.mp4 /home/intro/play.mp4) -c copy /home/vid2/output_vid4.mp4
ffmpeg -f concat -safe 0 -i < <(printf "file '%s'\n" /home/intro/play.mp4 /home/vid/vid5.mp4 /home/intro/play.mp4) -c copy /home/vid2/output_vid5.mp4
Отсюда вы сможете адаптировать команды ffmpeg
к любым другим особенностям, которые вам нужны.