Скрипты оболочки для контекстного меню Meld Nautilus
Beyond Compare предоставляет "Выбрать для сравнения" и "Сравнить с выбранным", используя два сценария nautilus (хранятся в /home/user/.gnome2/nautilus-scripts
).
Сценарий 1: выберите для сравнения
#!/bin/sh
quoted=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)
echo "$quoted" > $HOME/.beyondcompare/nautilus
Сценарий 2: Сравнить с выбранным
#!/bin/sh
arg2=$(cat $HOME/.beyondcompare/nautilus)
arg1=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)
bcompare $arg1 $arg2
Я пытаюсь сделать похожие сценарии для Meld, но это не работает.
Я не знаком со скриптами оболочки. Может ли кто-нибудь помочь мне понять это:
quoted=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)
так что я могу адаптироваться к слиянию.
3 ответа
Кавычка =$( ...) присваивает любой выходной переменной переменную с именем quoted, и может позже использоваться в скрипте как $quoted ИЛИ ${quoted} ИЛИ "${quote}" ИЛИ "$quoted"
'|' char называется 'pipe' в unix/linux и соединяет выходные данные предыдущей команды для подачи в следующую команду.
Таким образом, вы просто разбираете сценарий по 1 части за раз и смотрите, что он делает,
quoted=$(
# I would execute below by itself first
echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
# then add on this piped program to see how data gets transformed
| awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }'
# then add this
| sed -e s#\"\"##
# the capturing of the output to the var 'quoted' is the final step of code
)
# you **cannot** copy paste this whole block of code and expect it to work ;-)
Я не знаю, что должно быть в $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS, поэтому трудно показать вам здесь. И, эта переменная не определена ни в одном из указанных вами кодов, поэтому вы можете получить пустую строку только тогда, когда echo
его ценность. Будьте готовы провести некоторое исследование о том, как установить это значение И каковы правильные значения.
Также я заметил, что ваш код "префикс" как #!/bin/sh
, Если это действительно /bin/sh, то подстановка команд, например, quoted=$(....)
не будет работать и должен генерировать сообщение об ошибке. Вероятно, ваша система действительно использует bash для /bin/sh. Вы можете устранить любую возможную путаницу в будущем (при переходе на систему, в которой /bin/sh = оболочка bourne), изменив 'shebang' на #! /bin/bash
,
Надеюсь, это поможет.
Если вы не пользуетесь собственным решением ради обучения, я бы предложил установить diff-ext
расширение наутилус. Он кроссплатформенный, и если вы используете Debian/Ubuntu, его установка должна быть такой же простой, как sudo apt-get install diff-ext
,
Проверьте некоторые скриншоты здесь - http://diff-ext.sourceforge.net/screenshots.shtml
Я только что открыл diff-ext благодаря этому посту, отлично!
Первая попытка не удалась: по умолчанию diff-ext не обрабатывает файлы резервных копий (*~ и *.bak). Чтобы включить это, запустите:
$ diff-ext-setup
и в Mime types
панель, проверка application/x-trash
,
Теперь вы можете сравнить файл и его резервную копию.