Дано:
Я только что запустил скрипт
$ 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}"
}
Я загрузил функцию и вызвал ее явно после запуска моего скрипта, и она почти сработала.
У меня есть две основные проблемы:
Я установил 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'
.
I Я использую ZSH с oh-my-zsh
.
Как я могу это исправить? Есть ли лучший способ реализовать эту функцию?