ラッパースクリプト「hhighlighter」を以下から入手した。https://github.com/paoloantinori/hhighlighter標準出力に希望の色を指定します。 ack-grep のインストール手順に従い、 ~/.bashrc に ack=ack-grep のエイリアスを作成し、 ~/.bashrc に h() 関数を入れて、端末に入力するとすべてがうまくいきます。しかし、同じコマンドをbashスクリプトに入れると、コマンドが見つからないというメッセージが表示されます。ここに例を挙げます。
root@kali:~# echo "abcd" | h a b c d
abcd
これが私のスクリプトの外観です
#!/bin/bash
echo "abcd" | h a b c d
入力したコマンドとまったく同じですが、スクリプトを実行したときの出力です。
root@kali:~# ./test.sh
./test.sh: line 1: h: command not found
端末に直接入力する場合はどのように機能しますが、bashスクリプトで同じコマンドを使用するとどのように機能しますか?この問題を解決するために〜/.bashrcが必要な場合、または他のものが必要な場合はお知らせください。現在4日間、この問題に対する回避策はありません。
答え1
問題は、bashが非対話式で始まると読まないことです~/.bashrc
。
h()
だからスクリプトを読んでください。
スクリプトでエイリアスを使用するには、次の手順を実行する必要があります。
スクリプトでエイリアスを許可する
shopt -s expand_aliases
スクリプトでエイリアスを定義します。
エイリアスの代替は、シェル関数を定義することです(対話型シェルと非対話型シェルで同じように機能します)。
foo () {
bar "$@"
}
ただし、スクリプトを実行するシェルが再初期化されると、実行中のシェルのエイリアスまたは関数定義をスクリプトにインポートできません。
答え2
私に役立つ解決策は、スクリプトがヘッダーを#!/bin/bash -i
使用して対話型モードで実行されるようにすることでした。
高度なバッシュスクリプトガイド警告するしかし、奇妙な結果については次のようになります。
これにより、エラーがなくても、誤ったスクリプト動作やエラーメッセージが表示されることがあります。
しかし、私はこのようなものを観察できませんでした。