Bash 脚本在本地和远程执行时的行为有所不同

Bash 脚本在本地和远程执行时的行为有所不同

我得到了以下脚本来在我的服务器上运行预备份内容:

#!/bin/bash
dump_name="nextcloud_$(date +%d-%m-%y_%H-%M-%S)_backup.sql"
printf "Enabling maintenance mode... " 
docker exec -u www-data nextcloud_front_1 sh -c "php occ maintenance:mode --on"
printf "\nDumping database...\n"
docker exec nextcloud_database_1 sh -c 'mysqldump -u root -p$MYSQL_ROOT_PASSWORD nextcloud' | sudo tee "/data/nextcloud/database/dumps/$dump_name" > /dev/null

当我通过 SSH 手动在服务器上运行它时,它可以正常工作,但我想远程运行它:

ssh user@host 'bash -s' < script.sh

但是然后我在 printf 中得到了以下输出:

" option does not exist.

maintenance:mode [--on] [--off]

这条线导致

docker exec -u www-data nextcloud_front_1 sh -c "php occ maintenance:mode --on"

我尝试了以下操作:

docker exec -u www-data nextcloud_front_1 sh -c "php occ maintenance:mode --on"
docker exec -u www-data nextcloud_front_1 sh -c 'php occ maintenance:mode --on'
docker exec -u www-data nextcloud_front_1 php occ maintenance:mode --on

另外,运行:

docker exec -u www-data nextcloud_front_1 echo 'php occ maintenance:mode --on'

输出符合预期

php occ maintenance:mode --on

所以我真的不知道错误来自哪里......

答案1

我在我的转储名称末尾发现了一个“?”,原来这是 Windows 上的 Notepad++ 引起的 ^M 字符(我在 Windows 上工作真是可笑)

dos2unix script.sh 

目前一切运行良好。

相关内容