Shell
/etc/profile 中定義的函式體在登錄時出現在 shell 歷史記錄中
我們在此處執行 IBM AIX(目前為 7100-03-03-1415),它缺少其他 UNIX 版本中預設的大量實用程序。我們需要半定期做的一件事是將紀元時間轉換為標準時間戳。為了解決這個問題,我創建了這個函式並將它放在
/etc/profile
:## Functions that are useful enough to be inherited by everyone ## # Prints timestamp from epoch time epoch() { if [ $# -eq 1 ] ; then SECONDS="$1" elif [ -t 0 ] || [ $# -gt 1 ] ; then echo "Usage: epoch <timestamp>" return 127 else read SECONDS fi perl -e 'print scalar localtime $ARGV[0],"\n"' $SECONDS return 0 }
該函式接受一個參數或讀取
stdin
並列印轉換後的時間戳。自從將此函式推送到我們所有的 LPAR 以供全面使用以來,我注意到該函式的文本在
.sh_history
生成新的 shell 後出現在每個使用者中:ls -la ssh localhost if [ $# -eq 1 ] ; then SECONDS="$1" elif [ -t 0 ] || [ $# -gt 1 ] ; then echo "Usage: epoch <timestamp>" return 127 else read SECONDS fi perl -e 'print scalar localtime $ARGV[0],"\n"' $SECONDS return 0 } cat .sh_history
我以前從未見過這樣的事情。它不會影響生產或正常執行時間,因此這比其他任何事情都更令人好奇。很明顯,在載入使用者的 shell 時正在讀取該函式,但是是什麼導致它列印到 shell 歷史記錄?
編輯添加:目前執行 ksh 版本 M-11/16/88f。
這實際上是預期的行為;ksh 自動將所有函式定義記錄在歷史文件中。
可以使用“nolog”選項關閉此選項:
set -o nolog