2013-03-20 52 views
0

我偶然發現了一些我無法想象的東西。以下情況:我通過命令行下載了python前端以控制Dropbox(dropbox.py)。我把這個文件夾中:Zsh/Bash:路徑不是它應該是的

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

我在所謂的 「保管箱」 的/ usr/bin中做了一個簡單的bash腳本:

#!/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 

是的。它告訴我另一個用戶名。具體來說:我在這個linuxbox上通過SSH登錄。在遠程外殼上有byobu運行。在byobu中運行zsh。 USERNAME2等於說我對我的本地linuxbox當前登錄的用戶,與我相連:

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

這就是我如何連接。

所以必須有一個變量從我的本地shell傳遞到遠程shell,python似乎讀取它,但我無法弄清楚它會是什麼。

現在..看看這個:當我在我寫入bash腳本鍵入命令:

[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」,然後試圖運行「通過登錄-shell中運行它,例如它的工作保管箱」。

它不工作,要麼如果我改變hashbang以 「#!的/ usr/bin中/ zsh的」

在這個任何想法?

回答

3

whereis不會做你的想法:它搜索一組特定的目錄,而不是$PATHwhich搜索$PATH因此您需要使用which來查找哪個可執行文件將由給定名稱執行。

編輯:which作爲外部程序(對於沒有內置命令的shell,例如bash)在某些情況下不會給出正確答案,例如, shell別名。應該使用內建的(它也應該更廣泛地被使用,因爲它是由POSIX授權的,儘管不一定是內建的)。

+0

啊!謝謝!現在我看到發生了什麼。有一個別名在我的zsh-conf的設置: 其中收存箱 保管箱:別名/home/username2/.dropbox-dist/dropboxd – user2190489 2013-03-20 12:16:17

+0

以我的bash ** **安裝,'which'是一個外部命令('/usr/bin/which'),而'type'是內置的,它可以執行@ user2190489所需要的內容。 (我不知道'哪個'內建到** zsh **。) – 2013-03-20 14:34:30

+0

@Robᵩ'哪個是zsh內建的,但爲什麼這很重要? – wRAR 2013-03-20 14:45:21