2016-08-17 10 views
2
function run() { 
    nohup python $1 > nohup.out & 
} 

私は「実行scriptname.py」としてこれを呼び出すと、bashは以下のコマンドを実行します。このbash関数をfishシェルに変換するにはどうすればよいですか?コマンドラインで

python scriptname.py > nohup.out & 

はあなたが私は魚にこれを変換する助けることができます。

これは単純に設けることなく、

を言っ存在

〜/ .configを/魚/ config.fishに私は、この今のところ..

function run 
    bash -c "nohup python $1 > nohup.out &" 
end 

私はソースを呼び出していますエラーの内容に関する有用なヒント。

+0

すべてのバグをそのまま残して翻訳しますか? –

+0

...なぜ 'paste'を使うのですか?それはここで価値のないものを絶対に購入します。 stdinを(あまりにも)stdinを引数リストに変換したいのであれば、 '$(cat)'はそれを等価に行います。 –

+0

...もう一度見て、*ひどく*。それは引用符を処理しません、それはあなたがエスケープすることはできません、それはあなたがスペースで引数を渡すことはできません...あなたが実際の目標を記述し、それを達成するための最良の方法を求めたら私たちに翻訳するバグのコードを与えるよりも。 –

答えて

3

これは魚のあなたのための機能は完全に有効(より正確)の交換です:...

run() { 
    nohup python "[email protected]" </dev/null >nohup.out 2>&1 & 
} 

:これは、ネイティブ・bashの機能と同等です

function run 
    bash -c 'nohup python "[email protected]" > nohup.out &' _ $argv 
end 

個人的には、nohupではなく、disownを使用するよう書き直すことをお勧めします。 fishから見誤りに関して


は、私は他に注意を払うことをお勧めしたい(ない構文関連)ファイルを読み取ることができるかどうか影響を与えた可能性がある - など、権限を

3

実際にbashを実行する必要はありませんが、魚もnohupを実行することができます。リダイレクトも機能します。

$ 1と$ 2の代わりに、魚の関数の引数が$ argv配列に格納されているという点で、それとは少し違いがあります。

function run 
    nohup python $argv > nohup.out & 
end 

これは、1つの要素ごとのようにそのすべての要素に$ ARGVの拡大を図りますので、run script.py banananohup python script.py banana > nohup.out &を実行します。真に1つの引数だけが渡されるようにするには、$argv[1]が必要です。

私はconfig.fishを調達するときにあなたの定義がエラーを引き起こす原因が実際にはわかりません - どの魚のバージョンを使用していますか?

+0

私のシステムでは、 'nohup'はstderrがstdout _on stderr_にリダイレクトされるという厄介なメッセージを出力しますが、これはbashで同じことをするときにも起こるはずです。 – faho

関連する問題