2013-02-01 56 views
5

我必須避免在bash腳本中執行某個命令。
我以爲使用preexec陷阱來做到這一點。是否可以避免執行某個命令?

假設我想避免命令'source'僅用於axample。 我所做的基本上是以下幾點:

#!/bin/bash 

function preexec() 
{ 
    if test $(echo "$BASH_COMMAND" | cut -d " " -f1) == "source" 
     then 
      echo ">>> do not execute this" 
     else 
      echo ">>> execute this" 

    fi 
} 
trap 'preexec' DEBUG 

echo "start" 
source "source.sh" 
echo "go on" 

exit 0 

的想法工作正常,但在這一點上,我不知道如何避免上述命令的執行。
不知道如何解決這個問題?

+0

請記住,'source'是shell內建的,不像大多數其他命令。然而,有趣的問題。 –

+0

我的評論可能很愚蠢,但既然你可以改變腳本,爲什麼不直接評論這些命令並保存?或者這些命令來自用戶輸入?你可以通過正則表達式來檢查它們。或者我不明白你的要求? – Kent

+0

@Kent礦只是一個簡單的例子。我需要的是在某些可能發生或不可能發生的情況下阻止某個命令的執行。 –

回答

2

一種解決方法是定義該命令的別名,該命令什麼都不做,並在腳本完成後取消定義它。別名必須腳本本身對於這項工作中聲明:

alias source=: 
## The actual script source here... 
unalias source 
1

通過使用一種叫做source功能重新定義source命令。

功能可以導出。

source() { builtin source /dev/null; return 0; } 
source() { read < /dev/null; return 0; } 
source() { :; return 0; } 
export -f source 
+0

你不需要任何命令,返回就夠了。 'source(){return 1; }'可能是最好的,表示命令沒有成功運行。 –

相關問題