- 締切済み
シェルスクリプトの記述について
UBSメモリをディレクトリusbにマウントし、 そのUSBメモリの中に特定のファイルaaaがあればechoで文字を表示する、 という記述をしたいです。 cd /home/user/ mkdir usb sudo /dev/sda1 ./usb if [ -x home/user/usb/aaa ]; then echo "aaa ari" else echo "aaa nai" fi 以上を実行すると、aaa nai が表示されてしまうのですが、何故でしょうか。 実行後に/home/user/usbフォルダを見てみると、マウントには成功しています。 勿論USBメモリの中にはファイルaaaはあります。 aaaには実行権が付いているので、ifの後に -x をつけています。 Linux上で, vi aaa sudo cp aaa ./usb のようにaaaファイルを作成してUSBメモリの中にコピーすると、何故か実行権が付いてしまうので、 if [ -f ~~ だったものを if [ -x ~~ に変更しました。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
「ファイルの有無」なら -f でテストした方が安全. USBメモリにコピーしたときに実行属性が付くのは, その USBメモリのフォーマットによるものだと思います. FAT系には「実行可能」という属性がなく, Linux からは「全てのファイルが実行可能」と認識されるはずです.
>if [ -x home/user/usb/aaa ]; then パスが変なのは? /home~
お礼
解決はしていませんが、おそらく原因はわかりました。 ありがとうございました。
補足
し訳ありません。 投稿の際の記述ミスです。 このスクリプトじゃマウントすらできませんね。 cd /home/user/ mkdir usb sudo mount /dev/sda1 ./usb if [ -x /home/user/usb/aaa ]; then echo "aaa ari" else echo "aaa nai" fi 以上で、マウントはできるけどファイルのチェックができず、 「aaa nai」と表示されてしまいます。 やりたいことは、 USBメモリにファイルaaaがある時に「aaa ari」と表示させる、 です。
- ballville
- ベストアンサー率47% (233/487)
cpが抜けてるからではないでしょうか >sudo /dev/sda1 ./usb
お礼
解決はしていませんが、おそらく原因はわかりました。 ありがとうございました。
補足
申し訳ありません。 投稿の際の記述ミスです。 このスクリプトじゃマウントすらできませんね。 cd /home/user/ mkdir usb sudo mount /dev/sda1 ./usb if [ -x /home/user/usb/aaa ]; then echo "aaa ari" else echo "aaa nai" fi 以上で、マウントはできるけどファイルのチェックができず、 「aaa nai」と表示されてしまいます。 やりたいことは、 USBメモリにファイルaaaがある時に「aaa ari」と表示させる、 です。 よろしくお願いします。
お礼
解決はしていませんが、おそらく原因はわかりました。 ありがとうございました。
補足
了解しました、-xを使うのは止めてみます。 しかし、-f でダメだったから -x にしたので、 問題は別のところにあるようです。 直接コマンドを打ち込んでマウントし、 ls usb で見るとしっかり表示されるのですが(それは理由にならないかな)。 書き忘れましたが、 現在USBを認識してくれるmurasakiという自動起動サービスを殺しているので、 マウントを行う前に sudo /sbin/modprobe usb_storage というコマンドでUSBを認識させています。 関係あるでしょうか?