0

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

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

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

#!/bin/bash

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

现在,当我运行它时,会发生以下情况:

文件的 whereis:

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 登录。在远程外壳上有 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”,它也不起作用

对此有什么想法吗?

4

1 回答 1

3

whereis不会按照你的想法做:它搜索一组特定的目录,而不是$PATH. which搜索$PATH,因此您需要使用which来找出哪个可执行文件将以给定名称执行。

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

于 2013-03-20T11:39:04.450 回答