nohupで空白を含むパラメータを渡すには? [コピー]

nohupで空白を含むパラメータを渡すには? [コピー]

以下のようにjarを実行するスクリプトがあります。

user="Tim Tom";
jarfile=./app.jar
SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile"
nohup $SC_CD

次のエラーメッセージが表示されます。

Error: Unable to access jarfile Tom

それで、私が理解したところによると、空白の後ろの単語を瓶の名前として使用するということです。

だから私の質問は、 スペースを含むパラメータを渡すには?

ベストアンサー1

エスケープスペースをブロックする方法nohupと計画に対するこの回答の以前の反復についてのEric Renoufのコメントに基づいています。bash

user="Tim Toms"
jarfile=./app.jar
SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile"
echo $SC_CD  > temp.sh
nohup bash temp.sh

要点がバックグラウンドでJavaを実行することである場合は、おそらく次のことを行います。

echo java -jar -Xms512m -Xmx2048m -DUSER=\'$user\' $jarfile | at now

忘れてしまいます。nohup (それでクリーンアップが必要なスパムがあればどうすればいいですか?)

==== 以下は古い回答なので、コメントは意味があります。それ以外の場合は、次のことを忘れてください====

nohupあなたのステートメントが実際に一重引用符で囲まれた「Tim Tom」を呼び出すように見えますが、おそらくそれを呼び出して文字列から引用符を失うのではなく、単純な文字列を使用して呼び出してnohupいます。system()exec

先ほどechoを入れてテストしました。nohup

実際にテストすることはできませんが、最初の行

user='"Tim Tom"'

一重引用符は拡張を防ぐ必要があり、二重引用符はnohup

私の基礎は、次のテストスクリプトを作成することです。

ser="Tim Tom";
jarfile=./app.jar
SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile"
echo nohup $SC_CD

だから私がsh -x test.sh得るとき

+ user='Tim Tom'
+ jarfile=./app.jar
+ SC_CD='java -jar -Xms512m -Xmx2048m -DUSER='\''Tim Tom'\'' ./app.jar'
+ echo nohup java -jar -Xms512m -Xmx2048m '-DUSER='\''Tim' 'Tom'\''' ./app.jar
nohup java -jar -Xms512m -Xmx2048m -DUSER='Tim Tom' ./app.jar

ただし、提案された変更を適用すると、

+ user='"Tim Tom"'
+ jarfile=./app.jar
+ SC_CD='java -jar -Xms512m -Xmx2048m -DUSER='\''"Tim Tom"'\'' ./app.jar'
+ echo nohup java -jar -Xms512m -Xmx2048m '-DUSER='\''"Tim' 'Tom"'\''' ./app.jar
nohup java -jar -Xms512m -Xmx2048m -DUSER='"Tim Tom"' ./app.jar

どちらの場合も、echoはnohupが引数から少なくとも最初のレベルの引用符を取得する必要があることを示しています。そのため、追加レベルを追加することをお勧めします。

おすすめ記事