Shell

/etc/profile 中定義的函式體在登錄時出現在 shell 歷史記錄中

  • February 22, 2016

我們在此處執行 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

引用自:https://serverfault.com/questions/648971