コマンドを入力すると、使用した回数をカウントするなどのプログラムを作成できるようになりたいですcd
。これに似たもの:
[ : ~ $] cd public_html
Congratulations! You've earned the Badge 'cd master!'. Level up!
これまでに構成されたすべてのC++ファイルは次のとおりです。
#include <iostream>
int main(int argc, char* argv[]) {
int counter = 0;
for (int i = 1; i < argc; i++) {
std::cout << argv[i] << std::endl;
if (argv[i] == "cd")
std::cout << "Badge earned 'cd master!' +5120 experience points" << std::endl;
}
return 0;
}
以下を含む 1 つの試みられた解決策を反映しているため。
#!/bin/sh
bash | tee ./main
と
bind 'RETURN: "echo $(!!) | tee ~/.main \n"'
一緒に行くことにしました
export PROMPT_COMMAND='history | tail -n1'
しかし、それは出力を解析しなければならないことを意味します。
これを達成する最も簡単な方法は何ですか?
編集
これが私がなんとか生産したものです:
#!/bin/sh
export COUNTER=0
export MAXWIDTH=10
export TNL=1000
update_prompt() {
export PS1="> "
}
cd() {
COUNTER=$(($COUNTER + 25));
echo +25;
builtin cd $@;
}
help() {
echo "custom commands are: score";
}
score() {
echo $COUNTER"/"$TNL
BAR=$(yes "#" | head -n 10 | tr -d '\n')
OVERLAY=$(yes "%" | head -n 10 | tr -d '\n')
WIDTH=$(echo "$COUNTER*$MAXWIDTH/$TNL" | bc)
FIRST=${BAR:0:WIDTH}
SECOND=${OVERLAY:0:$((MAXWIDTH-WIDTH))}
echo "["$FIRST$SECOND"]"
}
exit() {
echo "Bye bye";
builtin exit $@;
}
export -f update_prompt
export -f cd # export the function
export -f help
export -f score
export -f exit
bash # run subshell with the exported functions
update_prompt