Bash

.bashrc 中的 shopt -s extdebug 在腳本文件中不起作用

  • February 7, 2018

我正在編寫一個 bash 腳本echoo.sh,目的是在執行命令之前回顯命令。我在裡面獲取腳本.bashrc。但它不會影響我執行的其他 bash 腳本。以下是我到目前為止的程式碼:

echoo.sh

#!/usr/bin/env bash
shopt -s extdebug
get_hacked () {
   [ -n "$COMP_LINE" ] && return  # not needed for completion
   [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # not needed for prompt
   local this_command=$BASH_COMMAND;
   echo $this_command;
}
trap 'get_hacked' DEBUG

當我打開外殼並執行任何命令時 - 它可以工作。但是對於腳本文件中的內容,它不起作用。

一些進一步的嘗試:

  1. 我嘗試.bashrc在測試腳本中獲取文件 - 它沒有用。
  2. 我在測試腳本中進行了採購echoo.sh,並且它起作用了。

所以,我試圖理解

  1. .bashrc如果我只是將腳本用於在腳本中執行的東西,為什麼它不起作用?
  2. 當#2 做時,為什麼不進一步嘗試#1 工作。

最後,我能做些什麼,這樣我就不必echoo.sh在所有腳本文件中獲取原始碼才能正常工作。我可以在一個地方獲取我的腳本並更改一些設置以使其適用於所有場景。

我測試了你所有的嘗試,它適用於 archlinux,bash 版本 4.4.12。但是我必須打開一個新的互動式 shell,以便獲取新的 shell ~/.bashrc

對於非互動式 shell,您還可以嘗試設置並~/.bashenvrc設置export BASH_ENV=$(realpath ~/.bashenvrc).~/.bashrc

~/bashenvrc現在,每次啟動非互動式 shell 時都會獲取腳本。

我也用daemonize 1.7.7-1 對此進行了測試

乾杯

引用自:https://unix.stackexchange.com/questions/422370