Различие между оценкой и командами псевдонима

ifile=~/test.ogv

echo '# Determine input WxH and FPS' 
eval "$(ffmpeg -i "$ifile" 2>&1 |sed -nr 's/.*Stream.*Video.* ([0-9]+x[0-9]+),.*[^[0-9.]([0-9.]+).*tbr,.*/WxH=\1;FPS=\2/p')"

echo '# Output multiple images from the input video'
ffmpeg -i "$ifile" -r $FPS -s $WxH -f image2 -vframes 100 -y ~/test-%03d.jpg 2>/dev/null

echo '# use ImageMagic "convert" to generate the animated .gif' 
convert -delay 20 ~/test-[0-9][0-9][0-9].jpg  ~/test.gif 

echo '# remove temp image files'    
rm -f  ~/test-[0-9][0-9][0-9].jpg

echo 'Done!'
0
14.04.2013, 04:27
2 ответа

Главным образом семантика. В то время как объединение Ваших командных строк в переменные полезно для сценариев целей, это не хорошо для искажения. Одной видимой причиной является завершение - в то время как различные сценарии завершения, как bash_completion смогший для контакта с псевдонимами (который печально никогда, оказывалось, не был моим случаем) заставляя их предположить то, что переменные являются растяжимыми к командам, могло сделать его так или иначе грязным.

Вторая причина alias позволяет Вам делать быстрые клавиши, не используя волшебной команды, ни символа как $ выполнять их. Таким образом, замена прозрачна, и она позволяет переопределять настройки по умолчанию для некоторых программ. Один хороший пример ls, который часто искажается как ls --color=auto по умолчанию. Пользователи не должны знать что видеть цветной вывод. Некоторый псевдоним дистрибутивов rm и связанные команды как rm -i, таким образом, они работают в интерактивном режиме и могут предотвратить случайные удаления.

Переменные, с другой стороны, могут быть полезны для некоторого использования, которое не требует двоичных файлов имитации. Широкий и хороший пример EDITOR переменная окружения. Это позволяет не только выполнить Вашего любимого редактора, использующего $EDITOR, но также и делает другие программы (который не может иметь доступа к оболочке) способный выполнить его, беря это - значение от их среды выполнения.

Могли бы быть некоторые другие вещи, о которых я не знаю, но результатом является то же: те команды должны использоваться, поскольку они предназначаются.

1
28.01.2020, 02:53

Псевдонимы не должны использоваться в сценариях (отключенный по умолчанию в неинтерактивных оболочках. Можно даже объединить несколько псевдонимов (как несколько строк для оценки). Но псевдонимы не дают Вам хороший уровень абстракции, который Вы получаете от командной строки, проанализированной дважды:

text1=foo; text2=bar; text3=fubar
for((i=1;i<4;i++)); do
  eval echo \$text${i}
done

Я признаю, что это могло быть сделано без оценки (varname=text${i}; echo ${!varname}). Но при построении команд я всегда использовал бы оценку.

shell-expand-line (M-C-e) не работает ни с одним без ошибок.:-)

0
28.01.2020, 02:53

Теги

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