我一直在尋找一個crontab文件,發現如下條目:含義/ zsh的-ls%之前的命令在crontab條目運行
30 05 * * * /bin/zsh -ls % MyScript.sh myConfigFile.ini
此項顯然執行MyScript.sh
與myConfigFile.ini
爲在zsh
中有一個參數,但這裏的-ls %
的含義是什麼。
我一直在尋找一個crontab文件,發現如下條目:含義/ zsh的-ls%之前的命令在crontab條目運行
30 05 * * * /bin/zsh -ls % MyScript.sh myConfigFile.ini
此項顯然執行MyScript.sh
與myConfigFile.ini
爲在zsh
中有一個參數,但這裏的-ls %
的含義是什麼。
事實上,雖然它確實執行MyScript.sh myConfigFile.ini
,它並不像它看起來那麼明顯。
-ls
是-l -s
的簡寫。這些參數能夠在的zsh
-l
使得選項LOGIN
,它告訴的zsh它是一個登錄shell某些選項。這也意味着~/.zprofile
端/etc/zprofile
(或/etc/zsh/zprofile
在某些系統)是在初始化和上離開~/.zlogout
和/etc/zlogout
讀取。-s
啓用選項SHIN_STDIN
。這告訴的zsh從STDIN,這也是默認的,如果與-c COMMAND
沒有指定命令,並指定腳本讀取命令。明確設置-s
還會禁用從命令行獲取腳本。任何通常作爲文件的參數都將被視爲正常的位置參數(也就是說,在啓動的shell會話中,它們將可用於數組[email protected]
和$*
以及標量參數$1
,$2
)。所以通常zsh -ls % MyScript.sh myConfigFile.ini
將開始一個的zsh登錄shell,參數$1
,$2
和$3
設置爲%
,分別MyScript.sh
和myConfigFile.ini
。它會不是運行MyScript.sh
,並且會等待來自STDIN的輸入。
但這是一個crontab裏面。這裏%
裏面的一個命令具有特殊的含義,除非用\
轉義。第一個%
之後的所有內容都將作爲標準輸入發送到該命令。任何進一步的%
將被換行符替換。
所以在結合的時候cron
(或替身)運行此crontab條目
30 05 * * * /bin/zsh -ls % MyScript.sh myConfigFile.ini
啓動zsh
作爲登錄shell,這將等待上STDIN輸入。 cron
然後將MyScript.sh myConfigFile.ini
作爲STDIN發送到殼。
爲什麼有人做過這樣(而不是隻MyScript.sh myConfigFile.ini
或許/path/to/MyScript.sh myConfigFile.ini
)是很難說沒有進一步的信息。請注意,MyScript.sh
不一定是zsh腳本購買可能真的是任何可執行文件。因此MyScript.sh
可能需要在~/.zprofile
中設置的環境。