- bash скрипт для монтирования андроид телефона, Isothiocyanate, 18:58 , 11-Янв-21 (1) –1
Да, прошу прощения за ошибки в английсом - набирал торопясь - то букву потерял то частицы to не хватет> #!/bin/bash > echo "This script will mount YOURS Android phone using go-mtpfs." - bash скрипт для монтирования андроид телефона, DiabloPC, 19:14 , 11-Янв-21 (2)
... if [ $D = '1' ] then mkdir ololo echo "blablabla" else ...
зы я что-то вообще не понял что это за извращение. Почему go-mtpfs? ззы читать от корки до корки: https://habr.com/ru/post/471242/
- bash скрипт для монтирования андроид телефона, DiabloPC, 19:34 , 11-Янв-21 (3)
И еще: если точка монтирования должна оставаться после отключения телефона, то проверка не правильная по определению. Там нужно исходить из вопроса "Существует ли такой каталог?" т.е
... if ! [ -d $HOME/AndroidDevice ] then mkdir $HOME/AndroidDevice else ...
А если точка монтирования временная, т.е. удаляется после отмонтирования, то накой вообще проверка, если такого каталога не должно существовать по умолчанию?
- bash скрипт для монтирования андроид телефона, Isothiocyanate, 20:19 , 11-Янв-21 (6) –1
- bash скрипт для монтирования андроид телефона, Licha Morada, 19:37 , 11-Янв-21 (4) +1
> Но несмотря на оператор if , скрипт каждый раз упорно пытается > создать точку монтирования.Оператор if работае не так, как вы ожидаете. Он выполняет "D=1 mkdir ~/AndroidDevice" в качестве test condition, т.е. в любом случае. Кроме того, D=1 это не сравнивание а присваивание значения. https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html Правильно было бы if [ "$D" = "1" ]; then mkdir ~/AndroidDevice echo "mount point is created." Но всё равно так не надо. > mkdir: cannot create directory ‘/home/rost/AndroidDevice’: File exists Делайте mkdir -p ~/AndroidDevice, и будет вам щастье. Я так понял, вы бoльше хвастаетесь чем жалуетесь. На предмет похвастаться, я в своё время отчаялся найти стабильный метод монтирования Андроида по шнурку, и теперь монтирую его по SSH. Без скрипта, одной командой монтирую, другой размонтирую. На телефпне установлен SimpleSSHD с аутентикацией по ключам, детали прописаны в моём ~/.ssh/config sshfs -o nonempty android:/storage/emulated/0 /mnt/android fusermount -u /mnt/android
- bash скрипт для монтирования андроид телефона, Isothiocyanate, 20:18 , 11-Янв-21 (5) –1
> sshfs -o nonempty android:/storage/emulated/0 /mnt/android > fusermount -u /mnt/android Пока хвастаться нечем - в 2 строчках 3 ошибки Спасибо за разбор полетов. Мне еще пока не совсем понятна ситуация с проверкой существования директории. И если она временная - монтировать в /tmp а потом удалять точку монтирования?
- bash скрипт для монтирования андроид телефона, Аноним, 01:28 , 12-Янв-21 (7)
>> sshfs -o nonempty android:/storage/emulated/0 /mnt/android >> fusermount -u /mnt/android > Пока хвастаться нечем - в 2 строчках 3 ошибки > Спасибо за разбор полетов. > Мне еще пока не совсем понятна ситуация с проверкой существования директории. > И если она временная - монтировать в /tmp а потом удалять точку > монтирования?man, searching via inet for FHS политки, стратегии и тактики использования на десткопах, сервах, мобилах, ембедах разные + возможны вендор специфик осложнения и прочий насморк
- bash скрипт для монтирования андроид телефона, Licha Morada, 03:33 , 12-Янв-21 (8) +1
> Мне еще пока не совсем понятна ситуация с проверкой существования директории.В том примере который я дал, я ничего не проверяю. Выполняю руками и смотрю глазами. Если заворачивать в скрипт, то: mkdir -p точкамонтирования if [ ! -d точкамонтирования ]; then обработать ошибку Посмотрите в man mkdir на предмет "-p" и man test на предмет "-d". Имейте в виду, что в Баше конструкции "if [ условие ]" нет. Есть "if команда", а "[" это на самом деле алиас команды test. > И если она временная - монтировать в /tmp а потом удалять точку > монтирования? Монтируйте туда, где бы этим было удобно пользоваться вам. Если вам удобно видеть папку на десктопе, то в ~/Desktop/Android. Если когда вы открываете файловый менеджер, у вас первым делом открывается домашняя диретория, то в ~/Android. Если у вас настроено, что по пявлению чего-то в /media совершаются какие-то действия или открывается какой-то диалог, то в /media/${USER}/Android. Если вы привыкли что всё "внешнее" монтируется в /mnt, то туда. В /tmp/Android тоже можно, ИМХО не слишком удобно. Прямо в /tmp монтировать не надо. Если вы не скачите из системы в систему и нет трбования "прибирать за собой", то я бы точку монтирования не удалял.
- bash скрипт для монтирования андроид телефона, Аноним, 05:17 , 12-Янв-21 (9)
> Если вы не скачите из системы в систему и нет трбования "прибирать > за собой", то я бы точку монтирования не удалял.Имхо, при таких требованиях, один раз нормально настроить удава на автомонтирование и не заморачиваться
- bash скрипт для монтирования андроид телефона, Isothiocyanate, 20:51 , 12-Янв-21 (10)
#!/bin/bash echo "This script will mount yors Android phone using go-mtpfs." echo " Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog." echo " Make dir AndroidDevice in yours home catalog? Yes=1 No=2" read D if [[ "D" = "1" ]] then mkdir ~/AndroidDevice echo "mount point is created." else go-mtpfs ~/AndroidDevice & # Note: If go-mtpfs is not ran in the background (with & at the end), another console will be needed to browse the device and unmount the device (when finished). echo "Device is mounted." fi echo "Do you wish unmount it? Yes=press any key" read B fusermount -u ~/AndroidDevice echo " Unmount is Ok." #When the device is unmount, go-mtpfs will quit. Теперь работает как надо. rost@DEBIAN999:~/Mount_Android_Phone$ ./Android_mount_script2 This script will mount yors Android phone using go-mtpfs. Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog. Make dir AndroidDevice in yours home catalog? Yes=1 No=2 2 Device is mounted. Do you wish unmount it? Yes=press any key 2021/01/12 19:47:27 FUSE mounted l Unmount is Ok. rost@DEBIAN999:~/Mount_Android_Phone$ Позже я попробую сделать автомтическую проверку на наличие директории монтирования и создании таковой если ее нет. Хотя нет, мне же надо сравнить числа а не строки: #!/bin/bash echo "This script will mount yors Android phone using go-mtpfs." echo " Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog." echo " Make dir AndroidDevice in yours home catalog? Yes=1 No=2" read D if [[ "$D" -eq 1 ]] then mkdir ~/AndroidDevice echo "mount point is created." else go-mtpfs ~/AndroidDevice & # Note: If go-mtpfs is not ran in the background (with & at the end), another console will be needed to browse the device and unmount the device (when finished). echo "Device is mounted." fi echo "Do you wish unmount it? Yes=press any key" read B fusermount -u ~/AndroidDevice echo " Unmount is Ok." #When the device is unmount, go-mtpfs will quit. Выхлоп: rost@DEBIAN999:~/Mount_Android_Phone$ ./Android_mount_script2 This script will mount yors Android phone using go-mtpfs. Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog. Make dir AndroidDevice in yours home catalog? Yes=1 No=2 2 Device is mounted. Do you wish unmount it? Yes=press any key 2021/01/12 19:55:18 FUSE mounted f Unmount is Ok. rost@DEBIAN999:~/Mount_Android_Phone$ ./Android_mount_script2 This script will mount yors Android phone using go-mtpfs. Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog. Make dir AndroidDevice in yours home catalog? Yes=1 No=2 1 mkdir: cannot create directory ‘/home/rost/AndroidDevice’: File exists mount point is created. Do you wish unmount it? Yes=press any key e fusermount: entry for /home/rost/AndroidDevice not found in /etc/mtab Unmount is Ok. rost@DEBIAN999:~/Mount_Android_Phone$
- bash скрипт для монтирования андроид телефона, DiabloPC, 23:30 , 14-Янв-21 (11)
> echo " Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice > in yours /home/user_name catalog." Зачем каждый раз это выводить? Делаем проверку наличия go-mtpfs - если его нету выводим сообщение и прерываем работу скрипта: ... IsGomtpfsPresent=$(which go-mtpfs &>/dev/null; echo $?) if ! [ "$IsGomtpfsPresent" == '0' ] then echo -e "Go-mtpfs not installed. \nPlease, install it for use this script" exit 1 fi ...
> echo " Make dir AndroidDevice in yours home catalog? Yes 1/No 2" > read D > if [[ "$D" -eq 1 ]] > then > mkdir ~/AndroidDevice > echo "mount point is created." > else > go-mtpfs ~/AndroidDevice & А здесь вообще ничерта не понял: в таком варианте, после создания каталога оно ничерта не смонтирует, т.к. монтирование в противоположном условии:
Если [[ответ=="да]] создать каталог если ответ равен любому другому значению выполнить монтирование. Правильно будет вот так:
... echo 'Make dir AndroidDevice in your home catalog? [Y]es/[N]o' read ANS if [[ $ANS == "Y" || $ANS = "y" || $ANS == "Yes" || $ANS == "yes" ]] then mkdir $HOME/AndroidDevice figo-mtpfs bla-bla-bla ...
- bash скрипт для монтирования андроид телефона, DiabloPC_пробегал, 00:40 , 15-Янв-21 (12)
А еще правильнее вот так:
... if ! [ -d $HOME/AndroidDevice ] echo 'Make dir AndroidDevice in your home catalog? [Y]es/[N]o' read ANS if [[ $ANS == "Y" || $ANS == "y" || $ANS == "Yes" || $ANS == "yes" ]] then mkdir $HOME/AndroidDevice else echo -e "Mount point does not exist. \nCan't Mount. " exit 2 fi fi go-mtpfs bla-bla-bla ...
- bash скрипт для монтирования андроид телефона, Isothiocyanate, 15:26 , 15-Янв-21 (13)
- bash скрипт для монтирования андроид телефона, Isothiocyanate, 16:55 , 15-Янв-21 (14)
> if [[ $ANS == "Y" || $ANS == > "y" || $ANS == "Yes" || $ANS == "yes" ]] > then DiabloPC, а где ты взял эту конструкцию с == ?
- bash скрипт для монтирования андроид телефона, DiabloPC_пробегал, 19:47 , 15-Янв-21 (15)
>> if [[ $ANS == "Y" || $ANS == >> "y" || $ANS == "Yes" || $ANS == "yes" ]] >> then > DiabloPC, а где ты взял эту конструкцию с == ?Просто написал от руки. || это логическое (ИЛИ)
- bash скрипт для монтирования андроид телефона, Isothiocyanate, 23:51 , 15-Янв-21 (16)
#!/bin/bash echo "This script will mount yors Android phone using go-mtpfs." echo " Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog." IsGomtpfsPresent=$(which go-mtpfs &>/dev/null; echo $?) if ! [ "$IsGomtpfsPresent" == '0' ] then echo -e "Go-mtpfs not installed. Please, install it for use this script" exit 1 fiif [ -d $HOME/AndroidDevice ] then ANS=A echo "Mount point exist." else echo "Make dir AndroidDevice in your home catalog? [Y]es/[N]o" read ANS fi if [[ $ANS == "Y" || $ANS == "y" || $ANS == "Yes" || $ANS == "yes" ]] then mkdir $HOME/AndroidDevice echo "Mount point is created." fi if [[ $ANS == "N" || $ANS == "n" || $ANS == "No" || $ANS == "no" ]] then echo -e "We do not create mount point." exit 2 fi go-mtpfs ~/AndroidDevice & # Note: If go-mtpfs is not ran in the background (with & at the end), another console will be needed to browse the device and unmount the device (when finished). echo "Device is mounted." echo "Do you wish unmount it? Yes=press Y key" read B fusermount -u ~/AndroidDevice echo " Unmount is Ok." # When the device is unmount, go-mtpfs will quit. exit 3 Как-то так.
- bash скрипт для монтирования андроид телефона, Isothiocyanate, 23:52 , 15-Янв-21 (17)
rost@DEBIAN999:~/Mount_Android_Phone$ ./Android_mount_script4 This script will mount yors Android phone using go-mtpfs. Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog. Mount point exist. Device is mounted. Do you wish unmount it? Yes=press Y key 2021/01/15 22:45:12 FUSE mounted y Unmount is Ok. rost@DEBIAN999:~/Mount_Android_Phone$ ./Android_mount_script4 This script will mount yors Android phone using go-mtpfs. Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog. Make dir AndroidDevice in your home catalog? [Y]es/[N]o y Mount point is created. Device is mounted. Do you wish unmount it? Yes=press Y key 2021/01/15 22:45:55 FUSE mounted y Unmount is Ok. rost@DEBIAN999:~/Mount_Android_Phone$ ./Android_mount_script4 This script will mount yors Android phone using go-mtpfs. Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog. Mount point exist. Device is mounted. Do you wish unmount it? Yes=press Y key 2021/01/15 22:46:24 FUSE mounted y Unmount is Ok. rost@DEBIAN999:~/Mount_Android_Phone$ ./Android_mount_script4 This script will mount yors Android phone using go-mtpfs. Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog. Make dir AndroidDevice in your home catalog? [Y]es/[N]o n We do not create mount point. rost@DEBIAN999:~/Mount_Android_Phone$ rost@DEBIAN999:~/Mount_Android_Phone$ ./Android_mount_script4 This script will mount yors Android phone using go-mtpfs. Firstly install go-mtpfs, MTP protocol, then make dir called AndroidDevice in yours /home/user_name catalog. Go-mtpfs not installed. Please, install it for use this script rost@DEBIAN999:~/Mount_Android_Phone$
- bash скрипт для монтирования андроид телефона, DiabloPC, 04:01 , 16-Янв-21 (18)
#!/bin/bashecho -e "This script will mount your Android phone using go-mtpfs.\n\n" echo "First install go-mtpfs, MTP protocol, then make dir called AndroidDevice in your /home/user_name catalog." ## Учитуя наличие следующих шести строк, которые выведут предупреждение, если это потребуется, эта строка ненужна. IsGomtpfsPresent=$(which go-mtpfs &>/dev/null; echo $?) if ! [ "$IsGomtpfsPresent" == '0' ] then echo -e "Go-mtpfs not installed. Please, install it for use this script" exit 1 fi if [ -d $HOME/AndroidDevice ] then ANS=A ## Не вкурил: что это?? Зачем? echo "Mount point exist." else echo "Make dir AndroidDevice in your home catalog? [Y]es/[N]o" read ANS fi ## следующие две проверки условий нелогично выносить из предыдущей конструкции if-then-else, т.к. если выполнилось условие предыдущей проверки то они не нужны вообще. ## if [[ $ANS == "Y" || $ANS == "y" || $ANS == "Yes" || $ANS == "yes" ]] ## then ## mkdir $HOME/AndroidDevice ## echo "Mount point is created." ## fi ## ## if [[ $ANS == "N" || $ANS == "n" || $ANS == "No" || $ANS == "no" ]] ## then ## echo -e "We do not create mount point." ## exit 2 ## fi ## Получаем вот такое: if [ -d $HOME/AndroidDevice ] then ANS=A ## Не вкурил: что это?? Зачем? echo "Mount point exist." else echo "Make dir AndroidDevice in your home catalog? [Y]es/[N]o" read ANS if [[ $ANS == "Y" || $ANS == "y" || $ANS == "Yes" || $ANS == "yes" ]] then mkdir $HOME/AndroidDevice echo "Mount point is created." fi if [[ $ANS == "N" || $ANS == "n" || $ANS == "No" || $ANS == "no" ]] then echo -e "We do not create mount point." exit 2 fi fi go-mtpfs ~/AndroidDevice & # Note: If go-mtpfs is not ran in the background (with & at the end), another console will be needed to browse the device and unmount the device (when finished). echo "Device is mounted." echo "Do you wish unmount it? Yes=press Y key" ## Нелогично, т.к. нажав N оно всеравно отмонтируется. Соответственно либо просто писать "Press any key to unmount…", либо делать обработку ввода как с созданием точки монтирования. read B fusermount -u ~/AndroidDevice ## echo "Unmount is Ok." ## А точно ли ОК?? СтОит, все-же, проверить код завершения предыдущей комманды if [ $(echo $?) != "0" ] then echo "Unmount failed" exit 3 fi echo "Unmount is Ok." exit 3 ## Не "exit 3", а "exit 0", т.к. это нормальное завершение работы. Нулевой код завершения означает правильное завершение, любой НЕнулевой - ошибку в выполнении.
- bash скрипт для монтирования андроид телефона, Isothiocyanate, 11:18 , 16-Янв-21 (20)
> if [ -d $HOME/AndroidDevice ] > then > ANS=A ## Не вкурил: что это?? Зачем? > echo "Mount point exist." > else > echo "Make dir AndroidDevice in your home catalog? [Y]es/[N]o" > read ANS > fi Если ANS не присвоить значение отличное от Y/N - программа входит в цикл и выходит на выход exit2. >[оверквотинг удален] > mkdir $HOME/AndroidDevice > echo "Mount point is created." > fi > if [[ $ANS == "N" || $ANS == "n" || > $ANS == "No" || $ANS == "no" ]] > then > echo -e "We do not create mount point." > exit 2 > fi > fi У меня тоже был вначале вложенный цикл. Но программа нормально не выполняла вложенный цикл, поэтому пришлось разбить на 2 отдельных. >[оверквотинг удален] > # Note: If go-mtpfs is not ran in the background (with & > at the end), another console will be needed to browse the > device and unmount the device (when finished). > echo "Device is mounted." > echo "Do you wish unmount it? Yes=press Y key" ## Нелогично, т.к. > нажав N оно всеравно отмонтируется. Соответственно либо просто писать "Press any > key to unmount…", либо делать обработку ввода как с созданием точки > монтирования. > read B > fusermount -u ~/AndroidDevice А это стоит добавить. >[оверквотинг удален] > if [ $(echo $?) != "0" ] > then > echo "Unmount failed" > exit 3 > fi > echo "Unmount is Ok." > exit 3 ## Не "exit 3", а "exit 0", т.к. это нормальное > завершение работы. Нулевой код завершения означает правильное завершение, любой НЕнулевой > - ошибку в выполнении. >
- bash скрипт для монтирования андроид телефона, DiabloPC_пробегал, 11:40 , 16-Янв-21 (21)
> Если ANS не присвоить значение отличное от Y/N - программа входит в > цикл и выходит на выход exit2. > У меня тоже был вначале вложенный цикл. Но программа нормально не выполняла > вложенный цикл, поэтому пришлось разбить на 2 отдельных.По обеим пунктам: НЕ ВЕРЮ!!! Что первое, что второе может не работать, либо вылететь в ошибки только при наличии ошибок или очепяток в самом скрипте. Но в таком случае нужно не добавлять несколько лишних и естественно нелогичных действий в код, а искать свои косяки.
- bash скрипт для монтирования андроид телефона, Isothiocyanate, 18:42 , 16-Янв-21 (22)
> По обеим пунктам: НЕ ВЕРЮ!!! > Что первое, что второе может не работать, либо вылететь в ошибки только > при наличии ошибок или очепяток в самом скрипте. Но в таком > случае нужно не добавлять несколько лишних и естественно нелогичных действий в > код, а искать свои косяки.Я думаю там могли быть какие-то ошибки, вызванные моим незнанием bash, которые я самостоятельно не смог устранить, поэтому переписал весь скрипт через одно место, лишь бы работало и выложил на форум то что вышло в итоге. Возможно, если бы я сохранил вариант с воложенным циклом, ты бы смог найти там ошибку, которую в упор не видел я. В принцмпе, bash ругался на fi большего внешнего цикла и на конец программы, на последнюю строку тоже. Я правильно понял что знак ! равносилен then ?
- bash скрипт для монтирования андроид телефона, DiabloPC_пробегал, 02:17 , 17-Янв-21 (24)
> Я правильно понял что знак ! равносилен then ?Нет, не правильно. "!" это отрицание, т.е логическое НЕ
## если каталог существует if [ -d /path/to/dir ]## если каталог НЕ существует if ! [ -d /path/to/dir ] А ошибки могут быть настолько примитивные, что аж смешно: я вот ту конструкцию с несколькими условиями когда проверял сам прибалдел: вроде же примитивная хрень, а материлось, как оказалось я умудрился пропустить пробел перед закрывающей скобкой и при этом еще и в упор это не мог разглядеть 😂😂
- bash скрипт для монтирования андроид телефона, DiabloPC_пробегал, 04:20 , 16-Янв-21 (19)
По поводу вот этих двух строк, если делать без обработки ввода > echo "Do you wish unmount it? Yes=press Y key" > read B Это можно сделать вот так:
read -n 1 -r -s -p $'Press any key to unmount...\n'
- bash скрипт для монтирования андроид телефона, Isothiocyanate, 19:46 , 16-Янв-21 (23)
> Это можно сделать вот так: > read -n 1 -r -s -p $'Press any key to unmount...\n' DiabloPC, может книгу какую посоветуешь? как-то по интернет статьям учиться не то.
|