[20191215]seq控制執行順序.txt

lfree發表於2019-12-16

[20191215]seq控制執行順序.txt

--//我測試經常使用seq+xargs控制迴圈執行次數,記錄一下工作中遇到的問題.

1.測試次數過1e6的情況:
--//一般測試迴圈次數不會太多,不會遇到這個問題.如果過了1e6.
$ seq  1000000 1000002
1e+06
1e+06
1e+06

--//解決方法如下:
$ seq -f "%7.0f" 1000000 1000002
1000000
1000001
1000002
--//這個版本我知道僅僅出現在rh 5.9 的版本(順便說一下版本的bash問題多多).bash version如下:
# echo $BASH_VERSION
3.2.25(1)-release

--//包括Bash Code Injection Vulnerability CVE-2014-7169.簡單的測試程式碼:
$  env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test
--//如果出現vulnerable顯示,說明有問題,我們exadata就有這個bug包括後臺的伺服器.其它高版本bash shell沒有這個問題:

$ echo $BASH_VERSION
4.4.12(3)-release

$ seq  1000000 1000002
1000000
1000001
1000002

2.執行啟動慢的問題.
--//測試例子:
$ cat a.txt
exec :v_a := &&1;
select * from t where id = :v_a;
commit;

$ cat t1.sh
#!/bin/bash
sqlplus -s -l scott/book <<EOF
set feedback off
variable v_a number;
$(seq 1000000 | xargs -IQ echo -e "@ a.txt Q" )
quit
EOF

--//如果執行t1.sh,會遇到執行啟動緩慢的問題,因為bash shell要完全展開seq 1000000 | xargs -IQ echo -e "@ a.txt Q" 的輸出後
--//才開始執行.要將seq 1000000 | xargs -IQ echo -e "@ a.txt Q" 放在外面,改寫如下:

$ mknod  /tmp/oop.pipe p
$ ls -l /tmp/oop.pipe
prw-r--r-- 1 oracle oinstall 0 2019-11-04 10:44:02 /tmp/oop.pipe
--//建立一個管道裝置.

$ cat t1.sh
#!/bin/bash

seq 1000000 | xargs -IQ echo -e "@ a.txt Q"  > /tmp/oop.pipe &

sqlplus -s -l scott/book <<EOF
set feedback off
variable v_a number;
@ /tmp/oop.pipe
quit
EOF

3.另外發現seq也可以拼成一行,使用-s引數.

$ seq -s ":" 10
1:2:3:4:5:6:7:8:9:10

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2668702/,如需轉載,請註明出處,否則將追究法律責任。

相關文章