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

В командной строке я называю это как «запустить scriptname.py» и Баш выполняет следующую команду:Как перевести эту функцию bash на рыбную оболочку?

python scriptname.py > nohup.out & 

Можете ли вы помочь мне перевести это на рыбу.

меня это до сих пор ..

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

Когда я звоню источник на ~/.config/рыбы/config.fish

Это существует просто говоря

без предоставления любые полезные подсказки относительно того, что такое ошибка.

+0

Вы хотите, чтобы это перевести со всеми ошибками нетронутыми? –

+0

... и зачем использовать 'paste' вообще? Он покупает вас абсолютно ничего ценного здесь. Если вы хотите (плохо) перевести stdin в список аргументов, '$ (cat)' будет делать это равнозначно. –

+0

... но смотреть снова, * плохо *. Он не будет обрабатывать кавычки, он не позволит вам ускользнуть, он не позволит вам передавать аргументы с пробелами ... было бы лучше, если бы вы описали свою фактическую цель и попросили наилучшего способа ее выполнения, а чем дать нам код ошибки для перевода. –

ответ

3

Это вполне допустимо (и правильнее) замена для вашей функции в рыбе:

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

Это эквивалентно функция нативного Баша:

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

... который , лично я предлагаю переписать для использования disown, а не nohup.


Что касается ошибки видно из fish, я предлагаю обратить внимание на какой-либо другой (не синтаксический связанный), которые могут оказать влияние, может ли файл быть прочитаны - разрешения и т.д.

3

Здесь действительно не нужно выполнять bash, рыба также может выполнять nohup, перенаправления также работают и т. Д.

Существует незначительная разница в том, что вместо $ 1 и $ 2 и т. Д. Аргументы функции рыбы хранятся в массиве $ 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 - какую версию для рыб вы используете?

+0

Обратите внимание, что в моей системе 'nohup' печатает раздражающее сообщение о том, что stderr перенаправляется на stdout _on stderr_, но это также должно произойти, когда вы делаете то же самое в bash. – faho