2013-03-20 2 views
0

Я наткнулся на то, что я просто не могу понять. Следующая ситуация: я загрузил интерфейс python для управления Dropbox через командную строку (dropbox.py). Я положил этот файл в папке:Zsh/Bash: Путь не такой, какой он должен быть

/home/username1/.dropbox-dist/dropbox.py 

Я сделал простой Баш скрипт в/USR/бен называется «раздаточным»:

#!/bin/bash 

python /home/username1/.dropbox-dist/dropbox.py 

Теперь, когда я запускаю это происходит следующее:

в WhereIs для файла:

[email protected]_remote /home/username1 # whereis dropbox 
dropbox: /usr/bin/dropbox 

Когда я запустить его:

[email protected]_remote /home/username1 # dropbox 
zsh: no such file or directory: /home/username2/.dropbox-dist/dropboxd 

Да. Он сообщает мне другое имя пользователя. Конкретно: я вошел в систему через SSH на этом linuxbox. На удаленной оболочке работает byobu. В byobu работает zsh. USERNAME2 равно пользователю, что я в настоящее время вошли в систему с моей локальной linuxbox, с которой я подключен:

[email protected]_local /home/username2 # ssh [email protected]_remote 

То, как я связан.

Таким образом, должна быть переменная, которая была передана моей удаленной оболочке из моей локальной оболочки, и, похоже, python читает ее, но я не могу понять, что это будет.

Теперь .. посмотрите на это: Когда я ввожу команду, которую я написал в сценарий Баш:

[email protected]_remote /home/username2 # python /home/username1/.dropbox-dist/dropbox.py 
Dropbox command-line interface 

Так он работает, если я делаю это вручную. Другое дело: если я запускаю его на всем пути он тоже работает:

[email protected]_remote /home/username1 # /usr/bin/dropbox 
Dropbox command-line interface 

И это действительно работает, если я запустить его с помощью входа-оболочки, например, с помощью «Баш -l», а затем пытается запустить " раздаточная».

Это не работает, либо если изменить hashbang на «#!/USR/бен/ЗШ»

Любые идеи по этому поводу?

ответ

3

whereis не делает то, что вы думаете: он ищет определенный набор каталогов, а не $PATH. which, Вы найдете $PATH, поэтому вам необходимо использовать which, чтобы узнать, какой исполняемый файл будет исполнять его именем.

Редактировать: which как внешняя программа (для оболочек, у которых нет встроенной команды, такой как bash), не даст правильного ответа для некоторых случаев, например. псевдонимы оболочки. Вместо этого следует использовать встроенный type (он также должен быть доступен более широко, так как он назначен POSIX, хотя и не обязательно как встроенный).

+0

Ах! Спасибо! Теперь я вижу, что произошло. В моем zsh-conf есть псевдоним: , который выдает dropbox: aliased to /home/username2/.dropbox-dist/dropboxd – user2190489

+0

В моей установке ** bash **, 'which' является внешней командой ('/usr/bin/which'), в то время как 'type' является встроенным, который делает то, что нужно @ user2190489. (Я не знаю, если 'which' встроено в ** zsh ** или нет.) –

+0

@ Robᵩ' which' является встроенным в zsh, но почему это имеет значение? – wRAR