Дано:
Я только что запустил скрипт
$ my-script.sh
который живет в ~/bin
и является символической ссылкой на реальный файл
$ ls -l ~/bin
[...] /Users/myself/bin/my-script.sh -> /Users/myself/.config/scripts/real-name.sh
Затем:
Я хочу отредактировать файл, на который указывает скрипт, который я только что вызвал.
Что-то типа:
${EDITOR} "$(readlink $(which my-script.sh))"
Я попытался загрузить следующую функцию, которая
function edit-last() {
LAST_COMMAND="$(history -1 | sed -Ee 's/^[[:space:]]*[[:digit:]]+[[:space:]]*//')"
REAL_PATH="$(readlink $(which "${LAST_COMMAND}"))"
$EDITOR "${REAL_PATH}"
}
Я загрузил функцию и вызвал ее явно после запуска моего скрипта, и она почти сработала.
2 основные проблемы, которые я получил:
Я установил
EDITOR="emacsclient -n -a '' -c"
, но вызов его через$EDITOR
не работает при расширении. Я получаюcommand not found: emacsclient -c -a '' -t
. Если я изменю последнюю строку наemacsclient -c -a '' -t "${REAL_PATH}"
. Оно работает.Я пробовал
bindkey "^e" edit-last
, но когда я набираю "CTRL-e", я получаюNo such widget 'edit-last'
.
Я использую ZSH с oh-my-zsh
.
Как я могу это исправить? Есть ли лучший способ реализовать эту функцию?