Zsh / Bash:路径不是应该的

时间:2013-03-20 11:15:40

标签: python bash dropbox zsh

我偶然发现了一些我无法弄清楚的事情。以下情况:我通过命令行(dropbox.py)下载了python前端来控制dropbox。我把这个文件放在文件夹中:

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

我在/ usr / bin中创建了一个名为“dropbox”的简单bash脚本:

#!/bin/bash

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

现在,当我按照以下方式运行时:

文件的位置:

root@linux_remote /home/username1 # whereis dropbox
dropbox: /usr/bin/dropbox

当我运行它时:

root@linux_remote /home/username1 # dropbox
zsh: no such file or directory: /home/username2/.dropbox-dist/dropboxd

呀。它告诉我另一个用户名。具体来说:我在这个linuxbox上通过SSH登录。在远程shell上有byobu运行。在byobu运行zsh。 Username2等于我当前在我的本地linuxbox上登录的用户,我用它连接:

username2@linux_local /home/username2 # ssh username1@linux_remote 

这就是我的联系方式。

所以必须有一个从我的本地shell传递给我的远程shell的变量,而python似乎读了它,但我无法弄清楚它会是什么。

现在..看看:当我输入我写入bash脚本的命令时:

username2@linux_remote /home/username2 # python /home/username1/.dropbox-dist/dropbox.py
Dropbox command-line interface

如果我手动操作它就会运行。 另一件事:如果我用整个路径运行它也是有效的:

root@linux_remote /home/username1 # /usr/bin/dropbox
Dropbox command-line interface

如果我通过login-shell运行它,它会工作,例如使用“bash -l”,然后尝试运行“dropbox”。

如果我将hashbang更改为“#!/ usr / bin / zsh”

,它也不起作用

有关于此的任何想法吗?

1 个答案:

答案 0 :(得分:3)

whereis没有按照您的想法行事:它搜索一组特定的目录,而不是$PATHwhich搜索$PATH,因此您需要使用which找出将由给定名称执行的可执行文件。

编辑:which作为外部程序(对于没有内置命令的shell,例如bash),在某些情况下无法给出正确答案,例如shell别名。应该使用type内置函数(它也应该更广泛地提供,因为POSIX强制要求,但不一定是内置函数。)