2

このコマンドを実行する必要があります

psql -c "create database $var with encoding 'unicode';" -U edumate template1

別のユーザーのスクリプトから。su 構文はsu postre -c 'some command'、別の引用符が必要なためです。$varまた、psql コマンドには変数が含まれていることに注意してください。

so 'some command' = psql -c "データベース $var をエンコーディング 'unicode' で作成;" -U 教育用テンプレート 1

「何らかのコマンド」も引用符で囲む必要があります(推測)

4

3 に答える 3

7

一重引用符と二重引用符の両方を含むものを単一の引数としてシェルに受け入れさせる必要があるときはいつでも使用できるトリックがあります。シェルでは引用符をエスケープできないため、内部を保護するために、必要に応じて一重引用符と二重引用符を切り替えて、隣接する複数の引用符付き文字列に変換する必要があります。それは醜いですが、うまくいきます。たとえば、

   He said "It's done"

引数が 1 つの場合、次の 3 つの文字列を隣接させることができます。

   'He said "It'   - protect this substring with single quotes
   "'"             - protect this substring with double quotes
   's done"'       - protect this substring with single quotes

取得するため:

   'He said "It'"'"'s done"'

あなたの場合、それは非常に醜いものになります:

su postre -c 'psql -c "create database '"$var with encoding 'unicode';"'" -U edumate template1'
于 2010-08-06T04:13:47.380 に答える
1

たとえばsudo、代わりに試すことができますsu

sudo psql -c "create database $var with encoding 'unicode';" -U edumate template1

(注:私は今psqlを持っていないので、このコマンドを正確にテストしていません)

于 2010-08-06T01:37:30.803 に答える
0

これをスクリプト ファイルに入力します (vi などのエディターに入力し、ファイルに保存します)。次に、 chmod +x を実行してから、su -c '<filename>'

ファイルに保存したくない場合は、使用する引用符に応じて、コマンドで、\"またはコマンド内で引用符をエスケープする必要があります。\'su -c

于 2010-08-06T01:37:56.090 に答える