在魚殼中,很難找到條件語法。有沒有人有解釋如何編寫if,withs和ors的鏈接?
我特別想編寫
if not $status
do a command
end
要執行的命令時,先前的命令返回非成功。我怎麼做?
在魚殼中,很難找到條件語法。有沒有人有解釋如何編寫if,withs和ors的鏈接?
我特別想編寫
if not $status
do a command
end
要執行的命令時,先前的命令返回非成功。我怎麼做?
參見http://fishshell.com/docs/current/commands.html#if和http://fishshell.com/docs/current/tutorial.html#tut_conditionals。
魚的,如果結構是這樣的:
if COMMAND
# do something if it succeeded
else
# do something if it failed ($status != 0)
end
再就是也not
,and
和or
命令,你可以像使用
if not COMMAND1; or COMMAND2
# and so on
如果你真的想測試一個變量(例如$狀態),則需要使用test
作爲命令,如
if test $status -eq 0
請記住,每個命令後$狀態會發生變化,所以如果您需要使用早期命令的狀態(常見於提示),您需要執行Joachim Pileborg所說的操作,並將其保存到另一個變量中。
此外,test
有引號的一些問題(因爲它是魚的少數地區之一,堅持POSIX) - 如果test $foo -eq 0
$ foo是不確定的,測試將錯誤出來,如果在test -n $foo
,未定義測試將是真實的(因爲POSIX要求用一個參數進行測試是正確的)。
一點題外話,在2.3.0之前版本中的魚,你需要與and
或or
添加begin
和end
周圍的條件,因爲它是古怪的解釋。
所以你必須做
如果開始COMMAND;或COMMAND2;結束 #做點事狀態= 0
我使用狀態變量在提示中顯示它,如果它不爲零。對於我使用下面的函數:
function __pileon_status_prompt
set -l __status $status
if test $__status != 0
printf '[%s%s%s]' (set_color red) $__status (set_color normal)
end
end
正如你可以看到我設置一個局部變量的$status
值和檢查,在條件變量。
謝謝。這是「推薦」的方式嗎? – pitosalas
最短的短形式是
the_previous_command; or do_a_command
# ..................^^^^^
假設您在$status
從「the_previous_command」獲得
的可能的複製[如何獲得前一個命令的狀態在魚腳本](http://stackoverflow.com/questions/34721446/how-to-get-the-status-of-previous-command-in-fish-script) – faho
不是一個dup。問題不在於如何獲得狀態,而在於如何根據狀態最佳地分配代碼。 – pitosalas