[20221104]bash exec使用技巧.txt
[20221104]bash exec使用技巧.txt
--//前幾天遇到mail問題,看到別人的使用技巧.利用exec 重定向輸出到文字檔案.原始例子:
# crontab -u oracle -l
5 23 * * * /home/del_log/del_arc.sh
# cat /home/del_log/del_arc.sh
source ~/.bash_profile
exec >> /home/del_log/log/del_arch`date +%F-%H`.log
/u01/app/oracle/product/19/db_1/bin/rman target / <<EOF
delete noprompt archivelog until time 'sysdate-10';
exit;
EOF
--//這樣執行時rman的輸出全部定向到/home/del_log/log/del_arch`date +%F-%H`.log檔案.
--//以前我寫crontab檔案都是如下:
# cat /etc/cron.d/ntp
*/20 * * * * root /usr/sbin/ntpdate 192.168.XXX.XX > /dev/null 2>&1
--//不過這樣給除錯帶來麻煩,必須在結束後修改回來.
--//如果在bash shell除錯時執行如下:
$ echo $BASHPID
10673
$ ls -l /proc/$BASHPID/fd
total 0
lrwx------. 1 oracle oinstall 64 2022-11-09 00:41:50 0 -> /dev/pts/2
lrwx------. 1 oracle oinstall 64 2022-11-09 00:41:50 1 -> /dev/pts/2
lrwx------. 1 oracle oinstall 64 2022-11-09 00:35:23 2 -> /dev/pts/2
lrwx------. 1 oracle oinstall 64 2022-11-09 00:41:50 255 -> /dev/pts/2
$ source /home/del_log/del_arc.sh
$ cat /home/del_log/del_arc.sh
--//沒有顯示.因為這時檔案描述符1被重新定義到/home/del_log/log/del_arch`date +%F-%H`.log.
--//開啟另外的會話執行:
$ ls -l /proc/10673/fd
total 0
lrwx------. 1 oracle oinstall 64 2022-11-09 00:41:50 0 -> /dev/pts/2
l-wx------. 1 oracle oinstall 64 2022-11-09 00:41:50 1 -> /home/del_log/log/del_arch2022-11-09-08.log
lrwx------. 1 oracle oinstall 64 2022-11-09 00:35:23 2 -> /dev/pts/2
lrwx------. 1 oracle oinstall 64 2022-11-09 00:41:50 255 -> /dev/pts/2
--//在結尾加入:
$ exec 1 > $(tty)
-bash: /dev/pts/2: Permission denied
-bash: printf: write error: Bad file descriptor
# ls -l /dev/pts/2
crw--w----. 1 root tty 136, 2 2022-11-09 08:54:11 /dev/pts/2
--//oracle使用者沒有許可權.可以寫成如下:
$ exec 1>&2
$ ls -l /proc/10673/fd
total 0
lrwx------. 1 oracle oinstall 64 2022-11-09 00:41:50 0 -> /dev/pts/2
lrwx------. 1 oracle oinstall 64 2022-11-09 00:41:50 1 -> /dev/pts/2
lrwx------. 1 oracle oinstall 64 2022-11-09 00:35:23 2 -> /dev/pts/2
lrwx------. 1 oracle oinstall 64 2022-11-09 00:41:50 255 -> /dev/pts/2
--//這樣才能保證測試完成後,其它命令執行顯示正常.
--//指令碼最後修改如下:
$ cat /home/del_log/del_arc.sh
#! /bin/bash
#source ~/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19/db_1
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin:/u01/ogg122
export ORACLE_SID=orcl
export NLS_LANG=AMERICAN_AMERICA.zhs16gbk
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LD_LIBRARY_PATH
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
export NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS.FF'
export NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH24:MI:SS.FF'
exec >> /home/del_log/log/del_arch`date +%F-%H`.log
/u01/app/oracle/product/19/db_1/bin/rman target / <<EOF
delete noprompt archivelog until time 'sysdate-10';
exit;
EOF
exec 1>&2
--//或者定義一個變數
#! /bin/bash
#source ~/.bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19/db_1
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin:/u01/ogg122
export ORACLE_SID=orcl
export NLS_LANG=AMERICAN_AMERICA.zhs16gbk
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LD_LIBRARY_PATH
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
export NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS.FF'
export NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH24:MI:SS.FF'
# exec >> /home/del_log/log/del_arch`date +%F-%H`.log
logfile=/home/del_log/log/del_arch`date +%F-%H`.log
/u01/app/oracle/product/19/db_1/bin/rman target / log=$logfile append <<EOF
delete noprompt archivelog until time 'sysdate-10';
exit;
EOF
# exec 1>&2
--//修改crontab如下:
# crontab -u oracle -l
5 23 * * * /home/del_log/del_arc.sh > /dev/null 2>&1
--//在我看來對方連基本的測試都沒有做,不然不會存在這麼多錯誤.
--//我百度 檢索 /home/del_log/del_arc.sh,找到一些連結,肯定對方的測試不嚴謹...其它人僅僅像做作業一樣照抄無誤.
--//連錯誤都是一樣的.連結如下:
--//https://blog.csdn.net/mgxiaomage/article/details/73863375
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2922655/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20210207]bash history小技巧.txt
- bash:exec -c 及 ENV_SUPATH
- [20221104]執行計劃一樣Plan hash value不同.txt
- [20191202]od使用技巧.txt
- [20210318]bash test (( )) [[ ]].txt
- [20181203]bash here $.txt
- [20180930]bash shell &.txt
- bash 小技巧
- [20210330]bash使用source or ..呼叫shell指令碼注意txt指令碼
- [20181219]script使用小技巧.txt
- [20190312]bash IFS例子.txt
- [20191202]awk使用陣列技巧.txt陣列
- [20210908]Reverse Shell with Bash.txt
- [20180413]bash 位置引數.txt
- [20180926]bash與分號.txt
- [20231029]使用cygwin調式bash shell引出的問題.txt
- [20190929]bash使用bc計算的相關問題.txt
- [20210913]bash shell $* and $@ 的區別.txt
- [20191010]bash行計算器.txt
- [20201116]bash shell IO重定向.txt
- [20181212]bash shell 字串 補零.txt字串
- [20211009]使用bash計算sql語句的sql_id.txtSQL
- [20191012]使用bash從sql_id計算hash_value.txtSQL
- [20231123]函式與bash shell呼叫.txt函式
- [20230428]bash實現xor計算.txt
- [20230314]nc reverse bash shell alias.txt
- [20230310]nc reverse bash shell問題.txt
- [20201109]here-doc(EOF) in bash.txt
- [20201109]bash shell特殊算術方式.txt
- [20210218]bash echo 建立順序號.txt
- [20190412]bash顯示日期相減.txt
- [20181230]Git Bash啟動緩慢.txtGit
- 五分鐘搞定Bash功能與使用技巧,運維速收!運維
- golang,再也不用管道了,exec.Command("bash", "-c", "ps -elf | grep xxx")Golang
- [20220120]探究v$session.SQL_EXEC_ID在共享池.txtSessionSQL
- [20190419]bash單雙引號問題.txt
- [20210324]bash shell value too great for base.txt
- [20181229]bash shell的算術運算 .txt