簡體   English   中英

如何將此bash函數轉換為fish shell?

[英]How do I translate this bash function to fish shell?

function run () {
    nohup python $1 > nohup.out &
}

在命令行上,我將其稱為“run scriptname.py”,bash執行以下命令:

python scriptname.py > nohup.out & 

你能幫我翻譯成魚嗎?

到目前為止我有這個..

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

當我在〜/ .config / fish / config.fish上調用source時

這只是說

Error when reading file: ~/.config/fish/config.fish 

沒有提供任何有用的提示,指出錯誤是什么。

這里真的沒有必要執行bash ,fish也可以執行nohup ,重定向也可以。

這里有一個小的區別,而不是$ 1和$ 2等等,fish函數的參數存儲在$ argv數組中。

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

這會將$ argv擴展為每個元素的所有元素,因此run script.py banana會運行nohup python script.py banana > nohup.out & 如果你真的想要傳遞一個參數,你需要$argv[1]

我實際上不知道為什么你的定義在導出config.fish時會導致錯誤 - 您使用的是哪個魚版本?

這是魚類功能的完全有效(並且更正確)的替代品:

function run
    bash -c 'nohup python "$@" > nohup.out &' _ $argv
end

這相當於native-bash函數:

run() {
  nohup python "$@" </dev/null >nohup.out 2>&1 &
}

...個人而言,我建議改寫使用disown而不是nohup


關於從fish看到的錯誤,我建議關注可能影響你的文件是否可讀的任何其他(不是語法相關的) - 權限等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM