0

わからないことがあった。次の状況:コマンドライン(dropbox.py)を介してドロップボックスを制御するためにPythonフロントエンドをダウンロードしました。私はこのファイルをフォルダに入れました:

/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経由でログインしています。リモートシェルでは屏風が走っています。屏風ではzshを実行します。Username2は、接続したローカルlinuxboxに現在ログインしているユーザーと同じです。

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

それが私がつながっている方法です。

したがって、ローカルシェルからリモートシェルに渡された変数が必要であり、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

また、たとえば「bash -l」を使用して「dropbox」を実行しようとすると、login-shellを介して実行すると機能します。

ハッシュバンを「#!/ usr / bin/zsh」に変更しても機能しません

これについて何かアイデアはありますか?

4

1 に答える 1

3

whereisあなたが思うことをしません:それはではなく、特定のディレクトリのセットを検索します$PATHwhich検索するので、指定された名前で実行される実行可能ファイルを見つけるため$PATHに使用する必要があります。which

編集:which外部プログラムとして(などの組み込みコマンドを持たないbashシェルの場合)、シェルエイリアスなどの場合には正しい答えが得られません。代わりにtypeビルトインを使用する必要があります(必ずしもビルトインとしてではありませんが、POSIXで義務付けられているため、より広く利用できる必要があります)。

于 2013-03-20T11:39:04.450 に答える