我偶然发现了一些我无法弄清楚的事情。以下情况:我通过命令行(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”
,它也不起作用有关于此的任何想法吗?
答案 0 :(得分:3)
whereis
没有按照您的想法行事:它搜索一组特定的目录,而不是$PATH
。 which
搜索$PATH
,因此您需要使用which
找出将由给定名称执行的可执行文件。
编辑:which
作为外部程序(对于没有内置命令的shell,例如bash
),在某些情况下无法给出正确答案,例如shell别名。应该使用type
内置函数(它也应该更广泛地提供,因为POSIX强制要求,但不一定是内置函数。)