このシェルスクリプトはbashでは失敗しますが、コマンドがSSHで動作するのはなぜですか?

このシェルスクリプトはbashでは失敗しますが、コマンドがSSHで動作するのはなぜですか?

WebサイトとそれをサポートするすべてのMySQLデータベースをバックアップするシェルスクリプトを作成しようとしています。私はオンラインでいくつかの例を見つけましたが、刑務所に閉じ込められたSSHセッション内のbashでスクリプトを実行すると失敗します。 SSHセッションに直接コマンドを入力すると正常に動作します。

#!/bin/sh

DB1="first_db"
THEDATE=$(date +"%Y-%m-%d")
THEUSER=user
THEDBPW=password

mysqldump -u $THEDBUSER -p$THEDBPW $DB1 > dbbackup_$DB1_$THEDATE.sql

tar -czf sitebackup_website_$THEDATE.tar /home/website/public_html
gzip sitebackup_website_$THEDATE.tar

スクリプトはWebサーバーにあるため、テスト目的でサーバーのcdディレクトリにSSHで接続して実行しましたbash backup.shmysqldump接続されておらず、パスワードを渡すことができないようです(「パスワードの使用:いいえ」というエラーレポートが返されました)。 「)。その後、tarコマンドが失敗し、/home/website/public_html「該当するファイルまたはディレクトリが見つかりませんでした」と計算できないことが報告され tarます。

私がここで何を見逃しているのでしょうか?

答え1

サーバーにログインし、次のコマンドを実行してスクリプトのWindows行末を確認します。

cat -v /path/to/script

行がで終わると^M問題になります。

以下を実行して、壊れた行末を含むファイルを変更できます。

dos2unix /path/to/script

dos2unixがサーバーにない場合は、次のようにsedを使用できます。

sed -i 's/\r$//' /path/to/script

答え2

ユーザー名を変数に割り当てましたが、THEUSERコマンドmysqldumpはその変数を使用していますTHEDBUSER

答え3

tardir=$PWD ; cd /home/website/public_html && 
    tar -czf "$tardir"/sitebackup_complete-office_"$THEDATE.tar"

それ以外の場合:

tar -C/home/website/public_html -czf \
    sitebackup_complete-office_"$THEDATE.tar"

通常、多くの人は次のようなtars場合を除き、絶対パスを使用できません。明確なガイドラインこの方法。

デフォルトでは、GNU tarは入力または出力から先行文字を削除し、コンポーネントを含む/ファイル名について文句を言います..。このオプションはこの動作をオフにします。

ssh'sコマンドがコマンドパスと参照に基づいてパスを事前確認することは完全に可能です。これは、パス名の変数拡張に関連しています。

答え4

問題の説明を正しく理解した場合、主な違いは次のとおりです。刑務所SSHセッション - 刑務所に閉じ込められたセッションで実行されているプロセスは、刑務所ディレクトリ(通常はホームディレクトリ)以外のコンテンツを表示できません。これが非監禁セッションに問題がない理由です。また、見ることができますウィキペディア刑務所の入り口詳細については。

関連情報