慶典採摘論據
回答
pick() { read -r arg1 arg2 remainder echo first arg is $arg1 echo The remaining args are $remainder }
--edit(響應在評論質疑)
一種方式來遍歷參數:
pick() { read args; set $args; while test $# -ne 0; do echo $1 shift done }
在循環的每個迭代,$ 1指的是一個參數。
如何讀取所有參數,因爲cuz我可以有10個參數或更多? –
如果你有10個或更多的參數 - 你做錯了什麼。 –
您是否在尋找xargs?
如果我沒有弄錯,OP希望我做同樣的事情:你給它一個字符串,如果字符串包含多個{words,lines},它會給你一個菜單,然後你選擇一個,然後它返回你在stdout上選擇的那個。
如果只有一個項目,它只是返回它。
這對於 - 使用我的特殊用例 - 日誌文件查看器腳本很有用:您給它一個文件名的子字符串,並通過find /var/log -name \*$arg\* -print
來查看它可以找到的內容。如果它獲得了獨一無二的命中,它會將它傳回到您的腳本,該腳本的運行較少。如果它不止一次點擊,它會顯示一個菜單,並讓你選擇一個。
ISTR KSH對此有一個內建的,但我並沒有對它印象深刻;我不記得bash是否有一個。
我在這裏是因爲我在尋找是否有人在我自己寫之前寫過它。 :-)
UPDATE:Nope;我自己寫的:
下面是一些示例代碼:
在/ usr/local/bin目錄/味精:
PATH=$PATH:/usr/local/bin
[ $UID = 0 ] || exec sudo su root -c "$0 $*"
FILE=/var/log/messages
[ $# -eq 1 ] &&
FILE=`find /var/log/ -name \*$1\* -print |
egrep -v '2011|.[0-9]$' |
pick`
echo "$FILE"
less +F $FILE
由於我管道名稱不太+ FI想用grep出來存檔日誌文件;這是用於交互式日誌查看。
在/ usr/local/bin目錄/送:
# Present the user a bash Select menu, and let them pick
# Try to be smart about multi-line responses
# must take input on stdin if it might be multiline
# get multiline input from stdin
while read LINE </dev/stdin
do
CHOICES+=($LINE)
done
# add on anything specified as arguments
while [ $# -gt 0 ]
do
CHOICES+=($1)
shift
done
# if only one thing to pick, just pick it
if [ ${#CHOICES[*]} -eq 1 ]
then
echo $CHOICES
exit
fi
# eval set $CHOICES
select CHOSEN in ${CHOICES[@]}
do
echo $CHOSEN
exit
done </dev/tty
- 1. 慶典
- 2. 慶典:*
- 3. 慶典
- 4. #!/斌/慶典--login VS#!/斌/慶典
- 5. 採摘的數據通過
- 6. 慶典模板
- 7. 在慶典
- 8. 通過慶典
- 9. 慶典輪4
- 10. 殺從慶典
- 11. 防止慶典
- 12. 慶典,文件
- 13. 從慶典
- 14. 用awk慶典
- 15. 慶典找到
- 16. 慶典 - 文件
- 17. 終端慶典 -
- 18. 慶典在
- 19. 慶典在子
- 20. 從慶典
- 21. 從慶典
- 22. 在慶典
- 23. 慶典管限
- 24. 與慶典
- 25. Ray gluingProject()採摘
- 26. LWJGL 3D採摘
- 27. GLScene採摘
- 28. 3D採摘lwjgl
- 29. 採摘從
- 30. 採摘熱鍵
應該'pick'試圖獲得的參數'echo'持有? (即使'echo'被其他命令所取代?) – aioobe
是的,我認爲只應該採取參數回聲 –