まず、問題を説明します。Linux デスクトップから Android タブレットにファイルをコピーすることがよくあります。入りたくない理由により、これを行う最も簡単な方法は、タブレットで sshDroid (ssh サーバー) を実行scp
し、シェルから を使用してファイルをコピーすることです。scp
コマンドの形式は次のとおりです。
scp -P 2222 ./some\ document\:\ with\ subtitle\ -\ author.txt \
root@197.157.0.211:/sdcard/uploads
この式で変更されるのはファイルの名前だけであり、タブ補完を使用して非常に簡単に取得できます。IPアドレスすら変わらない。ファイルを頻繁にアップロードするので、同じ文字を何度も入力したくありません。この目的のために、シェル関数を作成して に追加すると思いました.bashrc
。私が書いた関数は次のとおりです。
upload(){ scp -P 2222 $@ root@192.168.0.151:/sdcard/uploads; }
その使用法は次のようになります。
upload ./some\ document\:\ with\ subtitle\ -\ author.txt
しかし、試してみると、次の出力が得られます。
SSHDroid
Use 'root' as username
Default password is 'admin'
root@192.168.0.151's password:
./some: No such file or directory
ssh: Could not resolve hostname document: Name or service not known
with: No such file or directory
subtitle: No such file or directory
-: No such file or directory
author.txt: No such file or directory
bash はファイル名を関数に渡す前に自動的にエスケープ解除しているように見えますが、名前にスペースがあるため、scp コマンドはそれを複数のファイル名として扱います。
私の質問は次のとおりです。パラメーターでバックスラッシュを保持するにはどうすればよいですか、または関数内でバックスラッシュを再エスケープするにはどうすればよいですか? しばらくこれをいじった後、単純な python スクリプトを作成して /usr/local/bin にドロップしたくなりました。私が見逃している他のbashネイティブソリューションはありますか?