ターミナルは、ドラッグ アンド ドロップとコピー アンド ペーストの両方よりも前から存在するため、どちらも堅牢な方法で統合されていません。何をすべきかを決定するのは、各端末エミュレーター次第です。
グラフィカル ファイル マネージャーから 1 つまたは複数のファイルをドラッグ アンド ドロップしたときの一般的な反応は次のとおりです。
xterm何もしません。
gnome-terminalスペースで区切られたシェルエスケープされた単語としてパスを入力したふりをします。各単語は適切なエスケープで完全に単一引用符で囲まれています。
'/path/foo' '/path/Rock Lobster - B-52'\''s.mp3'
konsoleメニューが表示され、シェルの現在のディレクトリにコピー/移動するか、メタ文字が含まれている場合にのみ単一引用符で囲まれたシェルエスケープされた単語としてパスを貼り付けることができます。
/path/foo '/path/Rock Lobster - B-52'\''s.mp3'
あなたが説明していることから、あなたは使用していてgnome-terminal、一重引用符を含むファイルをドラッグアンドドロップして、ファイル名に対して他に何をするかを確認しようとしませんでした。
それで、あなたは何ができますか?
ファイルをドラッグ アンド ドロップするのではなく、パスをそのままコピー アンド ペーストすることをお勧めします。これが他のすべてのプログラムの仕組みであり、Charles Duffy のソリューションでできることです。
ファイルをドラッグするのではなく、パスを文字列としてコピー アンド ペーストするには、通常、ファイル マネージャーで [プロパティ] タブまたは [詳細] タブを開き、そこからフル パスをコピーします。
ただし、楽しみのために、本当に必要な場合は、ファイル マネージャーから入力をドラッグ アンド ドロップされたファイルとして解釈する方法を示しますeval。
#!/bin/bash
echo "Drag&Drop files/dirs and press enter when done."
echo "Do not drag&drop/paste/type text, because it will be evaluated as code."
IFS="" read -r input
eval "files=( $input )"
echo "Here are the things you pasted:"
for file in "${files[@]}"
do
ls -ld "$file"
done
次のように実行されます。
$ ./test
Drag&Drop files/dirs and press enter when done.
Do not drag&drop/paste/type text, because it will be evaluated as code.
'/usr/local/home/me/Documents' '/usr/local/home/me/Downloads'
Here are the things you pasted:
drwxr-x--- 3 me eng 4096 Aug 7 13:46 /usr/local/home/me/Documents
drwxr-x--- 2 me eng 4096 Aug 17 14:32 /usr/local/home/me/Downloads