![nohupで空白を含むパラメータを渡すには? [コピー]](https://linux33.com/image/87787/nohup%E3%81%A7%E7%A9%BA%E7%99%BD%E3%82%92%E5%90%AB%E3%82%80%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E6%B8%A1%E3%81%99%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
以下のように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が引数から少なくとも最初のレベルの引用符を取得する必要があることを示しています。そのため、追加レベルを追加することをお勧めします。