Я пытаюсь сделать функцию bash следующим образом:
Прямо сейчас у меня есть это:
function xyz {
ssh -t xyz.com 'cd ~/projects; $*; bash'
}
Используя это, запуск 'xyz' оставляет мне оболочку на xyz.com:~/projects, как я и хочу, но запуск 'xyz git pull' приводит к следующей ошибке:
/usr/bin/git: /usr/bin/git: cannot execute binary file
Я уверен, что мне не хватает чего-то простого, может ли кто-нибудь указать мне правильное направление?
Спасибо!
Сообщение об ошибке выглядит как git
пытается выполнить git
. Я подозреваю, что выполняется другая функция или псевдоним.
Еще одна потенциальная проблема заключается в том, что при выполнении переменной очень сложно правильно указать кавычки. Чтобы быстро продемонстрировать результат этого эффекта, попробуйте следующее (в кавычках) в приглашении оболочки:
"ls -l"
Чтобы решить вашу проблему, вы можете попробовать:
function xyz {
ssh -t xyz.com 'cd ~/projects; eval "$*"; bash'
}
Одним из объяснений может быть то, что / usr / bin / git не является исполняемым. Это может быть сценарий оболочки без #!
строка или двоичный файл, который не подходит для хоста. Когда вы входите на хост в интерактивном режиме, вы можете использовать другую копию git в другом месте из-за вашего пути к команде.
Вы использовали одинарные кавычки, и подстановка переменных не работает в одинарных кавычках:
$ function test { echo '$*'; }
$ test a b c
> $*
Ты видишь, $*
остается буквальным. Вместо этого используйте двойные кавычки:
$ function test { echo "$*"; }
$ test a b c
> a b c
Я верю в ваш случай $*
передается на целевой хост "как есть" и заменяется там, что выполняет что-то в вашем projects
каталог.