ここでの問題の原因として最も可能性が高いのは、sftp
プログラムが .ini 上のディレクトリにないことですPATH
。概念はプラットフォーム間でほぼ同じですが、いくつかの小さな問題があります。
Unix での作業PATH
次のように入力して、既知のディレクトリsftp
で が利用可能かどうかを確認します。PATH
which sftp
シェルプロンプトで。プログラムの場所で応答する必要がありsftp
ますが、見つからない場合はまったく応答がありません。見つからない場合は、自分で見つけて、その場所 (厳密には、プログラムを含むディレクトリ) をPATH
. 次のようなプログラムを見つけます。
locate sftp
または(非常に遅い!):
find / -name sftp -print
にディレクトリを追加するにはPATH
、シェルで次のようにします。
PATH=$PATH:/the/dir/to/append
Expect スクリプト内にディレクトリを追加することもできます (もちろん、 の前にある限りspawn
!):
append env(PATH) : /the/dir/to/append
Windows の操作PATH
WindowsならWindowsサーチ( Windows+ FIIRC)を使っsftp.exe
て(コマンドライン検索ツールもありますが使い方忘れました)というファイルを探します。
Windows PATH では、もう少し注意が必要です。
append env(PATH) ";" {C:\the\dir\to\append}
# Or this...
append env(PATH) ";" [file nativename C:/the/dir/to/append]
つまり、WindowsPATH
は別の区切り文字を使用し (:
ドライブ名をディレクトリ部分から分離するために使用されるため)、やや便利なスラッシュのバリエーション (バックスラッシュ) ではなく、ディレクトリのネイティブ名を使用する必要があります。 Tcl の構文と相互作用するため、{
中かっこ}
)。file nativename
私の2番目のバージョンのように、追加する前に変換するために使用する場合は、スラッシュを使用できます。
役立つ Tcl テクニック
Tcl コマンドauto_execok
を使用して、プログラムがインストールされているかどうかを確認できますPATH
。例えば:
puts [auto_execok sftp]
ただし、一部のコマンド (特にstart
Windows) では、より複雑な応答が得られます。このコマンドは、インタラクティブな Tcl の使用をサポートするコードの一部として実際に存在し、一見したよりもはるかに複雑な外部プログラムを実行する方法を記述しています。which
それでも、この回答の冒頭に記載されているクロスプラットフォーム バージョンに近似しています...
Tcl 8.6 では、要素区切り文字 (プラットフォームに応じてaまたは)$tcl_platform(pathSeparator)
を取得する方法として variable が提供されています。ただし、8.6 は以前のバージョンほど広く配布されていないため、おそらく役に立たないでしょう。PATH
:
;