

Windows10にインストールしたgit bashで以下を実行したのですが、  
応答がない状態となってしまいます。

[code]

    pg_dump -c -U xxxx -h xxxx.rds.amazonaws.com -f "C:\Users\xxxx.sql"
    
[/code]

コマンドプロンプトで同じコマンドを実行するとパスワードを聞かれ無事に実行可能でしたが  
git bashではパスワードを聞かれず、応答がない状態です。

何か設定などありますでしょうか？

最終的にshスクリプト内でコマンドを実行したいと考えているため、git bashを使いたいと考えています。

ご指摘いただけると幸いです。

**追記:**

応答が無いではなく、実際には以下のエラーが表示されていました。  
誤った情報で申し訳ございません。

[code]

    pg_dump: error: too many command-line argments(first is "-f")
    
[/code]


CC BY-SA 4.0
2022-01-15T14:03:25.827
85714
2022-01-17T11:58:15.300
2022-01-17T11:58:15.300
12842
12842
question
postgresql git-bash
git bash で pg_dump を実行してもエラー: too many command-line argments


入力された文字列はシェルごとに定められたルールで解釈され、プロセスが起動されます。同じ

[code]

    pg_dump -c -U xxxx -h xxxx.rds.amazonaws.com -f "C:\Users\xxxx.sql"
    
[/code]

を入力した場合でもgit bash（`bash`）とコマンドプロンプト（`cmd.exe`）では解釈結果が異なります。

  * `bash`の場合 
    * `"`はクオート文字列として解釈される。解釈後は削除される。
    * `\`はエスケープシーケンスとして解釈する。エスケープシーケンスに該当しない`\`は削除される。
    * `pg_dump`に渡される引数は `-c -U xxxx -h xxxx.rds.amazonaws.com -f C:Usersxxxx.sql` のようになる（`\`の後の文字次第）。
  * `cmd.exe`の場合 
    * `"`はクオート文字列として解釈される。解釈後も残される。
    * `\`は通常の文字列として解釈され特に変換されない。
    * `pg_dump`に渡される引数は `-c -U xxxx -h xxxx.rds.amazonaws.com -f "C:\Users\xxxx.sql"` になる。

`bash`から起動された`pg_dump`としては`-f`で正しいファイル名を受け取っていないため、サーバーに接続したとして実行すべき処理が不明であり、接続処理まで進んでいないと思われます。パスワードが聞かれないのはそのためではないでしょうか？

`cmd.exe`と同じ結果となるように`bash`で実行する場合は

[code]

    pg_dump -c -U xxxx -h xxxx.rds.amazonaws.com -f "\"C:\\Users\\xxxx.sql\""
    
[/code]

とかになるでしょうか。

* * *

`pg_dump`が`"`が不要だったり`/`をディレクトリ区切りと認識する場合は

[code]

    pg_dump -c -U xxxx -h xxxx.rds.amazonaws.com -f "C:/Users/xxxx.sql"
    
[/code]

でも動作するかもしれません。この辺りは実行するプログラム依存であり一概には言えません。


CC BY-SA 4.0
2022-01-16T04:14:57.527
85726
2022-01-16T23:27:15.030
2022-01-16T23:27:15.030
4236
4236
85714
answer