Bash 機能 scp ファイルが機能しない

Bash 機能 scp ファイルが機能しない

私は次のbash関数を書いた。

function to_company() 
{
    scp ${1} [email protected]://home/username 
}

私がするとき:

$ to_company code_diff.txt 

パスワードを要求した後、次のメッセージで失敗します。

scp: //home/username: not a regular file 

スクリプトに&を提供しようとしましたが、//home/username/同じ結果が得られました。//home/username/${1}

上記のコマンドを手動で実行してcode_diff.txt代わりに渡すと、${1}ファイル転送に問題はありません。

私は何を間違えましたか?

答え1

重要ではありませんが、リモートパスは/home/username(スラッシュ1つ)でなければなりません。 Sputnickが指摘したように${1}"${1}"

[email protected]:同じコマンドをコピーし、テストしたときにうまくいったので(「通常のファイルではない」エラーが発生した場合)//home/username

もう一度試してみるのは、デバッグを追加し(-vscpコマンドに提供して)、手がかりがあるかどうかを確認することです。

function to_company() 
{
    scp -v "${1}" [email protected]:/home/username 
}

答え2

この問題に間違った方法でアクセスしています。シェルラッパーを作成しないでください~/.ssh/config

Host work
Hostname long.server.name.company.com
User bob

次に、ファイルを会社のサーバーにコピーするには、次の手順を実行します。

scp filename.ext work:

リモートパスはホームディレクトリと比較しているwork:ためwork:/home/username


渡す引数にスペースまたはワイルドカードが含まれていると、関数は失敗します\[?*。この問題は、パラメータ拡張を二重引用符で囲むことで簡単に解決できます"$1"変数とコマンドの置換には常に二重引用符を使用してください。

別の潜在的な問題は、//パスの始まりが特に解釈される可能性があることです。通常、パスの連続スラッシュは1つのスラッシュと同じですが、2つのスラッシュで始まるパスは、いくつかのシステムで特別な意味を持ちます。

関連情報