Action Hook Inside WordPress Plugin Shortcode

It’s not entirely clear what your ultimate goal is, but a simple way to catch a form submission is to hook init and check if something is set:

function wpd_check_post_vars(){
    if( isset( $_POST['first_name'] ) ){
        // do something
    }
}
add_action( 'init', 'wpd_check_post_vars' );

There’s no connection here between the action and your Shortcode, it’s not really necessary. An important point to remember is that actions don’t persist beyond the request they’re added on. If you add_action after its corresponding do_action is triggered, nothing will happen.

You should also probably use something more unique than first_name.