команда не работает в файле скрипта, но работает нормально с командой оболочки

Я запускаю команду в своей оболочке. Работает нормально в оболочке. Я имею в виду только в терминале. Но мне нужно, чтобы он запускался из файла скрипта. Когда я запускаю его из скрипта, файл, указанный в одной опции команды, недоступен. Выдает ту же ошибку, как если бы путь к файлу был неверным. Путь к файлу в команде и в скрипте является абсолютным. Я также пробовал разные варианты пути - в корневой папке, с ~ перед, разные абсолютные пути.

Я создал файл сценария, начиная с #! / Bin / bash, а затем команды в следующей строке. Попытался выполнить его так:

sudo sh script.sh
sudo bash script.sh
sudo dash script.sh
. ./script.sh

Также попытался изменить первую строку на

#!/bin/bash
#!/bin/sh
#!/bin/dash
#!/bin/env sh
#!/bin/env bash
#!/bin/env dash

Попытался объединить ВСЕ комбинации строки заголовка и команды запуска. Все с одинаковыми результатами.

При запуске из файла сценария файл, переданный в параметре, недоступен. Но точно такая же команда прекрасно работает в оболочке. Файл передается в опции с абсолютным путем, например / home / ubuntu / file

Я также получил этот вывод

ubuntu@ip-XXX-XXX-XXX-XXX:~$ file -h /bin/sh
/bin/sh: symbolic link to dash

ubuntu@ip-172-30-2-170:~$ file -h /bin/bash
/bin/bash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), 
dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, 
BuildID[sha1]=452da38d6212b692cd80eb0dd1c99cf853da31ae, stripped

ubuntu@ip-172-30-2-170:~$ file -h /bin/dash
/bin/dash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), 
dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, 
BuildID[sha1]=a783260e3a5fe0afdae77417eea7fbf8d645219e, stripped

upd : команда, которую я выполняю, является командой s3fs. Команда для монтирования корзины s3 на экземпляр AWS в качестве папки. Я хочу сделать это автоматически при запуске / перезагрузке экземпляра и подумать о запуске скрипта с помощью cron's @reboot

Вот оно:

sudo /usr/local/bin/s3fs s3bucketname /home/ubuntu/bucketmountfolder -o allow_other -o uid=1000 -o mp_umask=002 -o multireq_max=5 -o use_path_request_style -o url=<myurl> -o passwd_file=/home/ubuntu/passwd

upd2:

Я решил проблему с файлом паролей, удалив опцию и установив учетные данные в файле паролей по умолчанию .passwd-s3fs. Теперь без опции файла паролей команда отлично работает со сценарием оболочки и НЕ работает в файле сценария оболочки, та же проблема.

upd3:

мой файл сценария выглядит следующим образом:

#!/bin/bash
echo 'starting mount script'
sudo /usr/local/bin/s3fs s3bucketname /home/ubuntu/s3bucketmountfolder -o allow_other -o uid=1000 -o mp_umask=002 -o multireq_max=5 -o use_path_request_style -o url=<my url> -o dbglevel=info -f -o curldbg
echo 'mount script done'

Добавление параметров отладки в команду дает такой вывод при запуске в файле сценария:

ubuntu@ip-172-30-2-170:~$ . ./automount.sh
starting mount script
[CRT] s3fs.cpp:set_s3fs_log_level(297): change debug level from [CRT] to 
[INF]
[INF]     s3fs.cpp:set_mountpoint_attribute(4382): PROC(uid=0, gid=0) - 
MountPoint(uid=1000, gid=1000, mode=40775)
'use: unknown option `curldbg
mount script done

без опций отладки это выглядит так:

ubuntu@ip-172-30-2-170:~$ . ./automount.sh
starting mount script
mount script done

В оболочке команда с опциями отладки выдает около 50 строк журналов.

2
задан 3 September 2019 в 17:41

1 ответ

'use: unknown option `curldbg

Я подозреваю, что эта строка является результатом фактической печати этого:

fuse: unknown option `curldbg<CR>'

тогда как <CR> символ возврата каретки, заставляя запаздывающий апостроф перезаписать начало строки.

Удостоверьтесь, что Ваш сценарий содержит новые строки стиля Unix (только NL).


Также отметьте это

  • . ./script.sh (иначе. source ./script.sh),
  • bash ./script.sh (или any_other_shell ./script.sh),
  • ./script.sh

три существенно отличающихся способа вызвать сценарий. Обычно необходимо пойти с третьим подходом (наряду с исполняемым файлом, обдумал сценарий). Это - также единственное из этих трех подходов где #!/blah вопросы строки хижины.

#!/bin/env sh

При выборе этого подхода для строки хижины Вам нужно /usr/bin/env вместо /bin/env.

4
ответ дан 2 December 2019 в 02:11

Другие вопросы по тегам:

Похожие вопросы: