
Originally Posted by
awerlang
Programs like sudo, runuser et al take the name of an executable, at most a shell command. But they can't take a function available only to the parent process (how could they understand?). You might rewrite the command, sourcing the function again, then calling the function. Pass it as a command to bash. Or write a separate bash script. You can prepend env vars to the script command if needed.
Here a test program saying if a string is hexa or not.
The called function does nor care who is calling.
The function is defined in the file sourced at the beginning of execution as said in my question
Code:
function make_file_command () {
A_FILE_CMD2="$1"
cat << EOF > "$A_FILE_CMD2"
source /run/media/$LOG_USER/NEW_INSTALL_LINUX/NEW_INSTALL_LINUX/15.x/V07/2020_05_22_12h09/1_NEW_INSTALL_USER/000_CONFIG/001_FIRST_STEP_CONFIG/002_FOLDERS_TO_INSTALL_FIRST/002_01_INSTALLED_BACKUP_SYS_FOLDER/backup_sys/000_COMMON2/Bin/system_common_function
...................
...................
source /run/media/$LOG_USER/NEW_INSTALL_LINUX/NEW_INSTALL_LINUX/15.x/V07/2020_05_22_12h09/001__FUNCTIONS__/new_install_linux_VM_init
source /run/media/$LOG_USER/NEW_INSTALL_LINUX/NEW_INSTALL_LINUX/15.x/V07/2020_05_22_12h09/001__FUNCTIONS__/new_install_linux_VM_init_function
EOF
}
MY_CMD="sudo runuser -l user_install -c 'is_hexa 01234566789ABCDEF__' "
A_FILE_CMD1="/tmp/000_file_command.sh"
make_file_command "$A_FILE_CMD1"
CMD="env | grep BASH_FUNC | sort"
echo "$CMD" >> "$A_FILE_CMD1"
echo " " >> "$A_FILE_CMD1"
echo "$MY_CMD" >> "$A_FILE_CMD1"
echo " " >> "$A_FILE_CMD1"
echo "RET_CODE=\$?" >> "$A_FILE_CMD1"
echo " " >> "$A_FILE_CMD1"
echo "echo \"RET_CODE=\$RET_CODE\"" >> "$A_FILE_CMD1"
echo " " >> "$A_FILE_CMD1"
echo .
echo .
echo "----------------------------------------------------------------"
echo "----------------------------------------------------------------"
echo .
echo .
echo "cat \"$A_FILE_CMD1\""
cat "$A_FILE_CMD1"
bash "$A_FILE_CMD1"
here is the generated command file :
Code:
source /run/media/user_install/NEW_INSTALL_LINUX/NEW_INSTALL_LINUX/15.x/V07/2020_05_22_12h09/1_NEW_INSTALL_USER/000_CONFIG/001_FIRST_STEP_CONFIG/002_FOLDERS_TO_INSTALL_FIRST/002_01_INSTALLED_BACKUP_SYS_FOLDER/backup_sys/000_COMMON2/Bin/system_common_function
source /run/media/user_install/NEW_INSTALL_LINUX/NEW_INSTALL_LINUX/15.x/V07/2020_05_22_12h09/1_NEW_INSTALL_USER/000_CONFIG/001_FIRST_STEP_CONFIG/002_FOLDERS_TO_INSTALL_FIRST/002_01_INSTALLED_BACKUP_SYS_FOLDER/backup_sys/000_COMMON2/Bin/system_common_general_env_var
source /run/media/user_install/NEW_INSTALL_LINUX/NEW_INSTALL_LINUX/15.x/V07/2020_05_22_12h09/001__FUNCTIONS__/new_install_linux_env_var
source /run/media/user_install/NEW_INSTALL_LINUX/NEW_INSTALL_LINUX/15.x/V07/2020_05_22_12h09/001__FUNCTIONS__/new_install_linux_functions
source /run/media/user_install/NEW_INSTALL_LINUX/NEW_INSTALL_LINUX/15.x/V07/2020_05_22_12h09/001__FUNCTIONS__/new_install_linux_VM_init
source /run/media/user_install/NEW_INSTALL_LINUX/NEW_INSTALL_LINUX/15.x/V07/2020_05_22_12h09/001__FUNCTIONS__/new_install_linux_VM_init_function
env | grep BASH_FUNC
sudo runuser -l user_install -c 'is_hexa 01234566789ABCDEF__'
RET_CODE=$?
echo "RET_CODE=$RET_CODE"
and here is the result :
Code:
BASH_FUNC_abort_because_test%%=() { unset A_MSG;
BASH_FUNC_activate_all_repo_but_source_debug%%=() { local L_SUSE_VER;
BASH_FUNC_array_contains_element%%=() { local e;
BASH_FUNC_array_to_file%%=() { NB_PARAM=$#;
BASH_FUNC_ask_YyNn%%=() { local L_REPLY="";
BASH_FUNC_ask_YyNn_timeout%%=() { local L_REPLY="";
BASH_FUNC_ask_YyRr%%=() { local L_REPLY="";
BASH_FUNC_ask_YyYy%%=() { local L_REPLY="";
BASH_FUNC_ask_YyYy_timeout%%=() { local L_REPLY="";
BASH_FUNC_config_at_next_reboot%%=() { local L_REPLY="";
...........................
........................
BASH_FUNC_get_subpath_front%%=() { set +x;
BASH_FUNC_get_subpath_tail%%=() { A_PATH="$1";
BASH_FUNC_is_hexa%%=() { local -i L_RET_CODE2;
BASH_FUNC_is_running_in_vm%%=() { local -i MY_FLAG=0;
BASH_FUNC_main_repositories_exists%%=() { local -i NB=0;
................................
...............................
BASH_FUNC_message_informal%%=() { local -a L_ARRAY;
BASH_FUNC_message_success%%=() { local -a L_ARRAY;
BASH_FUNC_message_warning%%=() { local -a L_ARRAY;
BASH_FUNC_my_bash_eval%%=() { local L_SOME_CMD="xxxxxxxxxxxxxxxxxx";
BASH_FUNC_my_bash_eval_find%%=() { local L_SOME_CMD="xxxxxxxxxxxxxxxxxx";
BASH_FUNC_my_bash_eval_rsync%%=() { local L_SOME_CMD="xxxxxxxxxxxxxxxxxx";
BASH_FUNC_my_get_salt%%=() { date --date "$1" +%s%N
BASH_FUNC_my_rename_ext%%=() { function my_rename_ext_suite1 ()
BASH_FUNC_ok_to_do_task%%=() { local -i L_RET_CODE L_RUN_NO_STOP L_TIMEOUT;
BASH_FUNC_print_array_full%%=() { local -i L_NB_ELEMENT;
BASH_FUNC_print_array_if_debug_on%%=() { local -i L_DEBUG=0;
BASH_FUNC_print_asso_array%%=() { L_ARRAY_NAME="$1";
BASH_FUNC_print_if_debug_on%%=() { local -i L_DEBUG;
BASH_FUNC_read_dummy_operator_input%%=() { local L_TEMP;
BASH_FUNC_read_dummy_operator_input_timeout%%=() { local L_TEMP;
BASH_FUNC_read_log_on_screen%%=() { local L_REPLY="";
.....................
....................
BASH_FUNC_update_param_config_file%%=() { L_DEBUG=0;
BASH_FUNC_yes_or_not%%=() { local L_REPLY="";
BASH_FUNC_yes_or_not_confirm%%=() { local -i RETURN_CODE=1;
RET_CODE=112
RET_CODE=112 is an error because '01234566789ABCDEF__' is not hexa
So my functions are accessible within "
sudo runuser -l user_install -c 'is_hexa 01234566789ABCDEF__'
"
I shall make another test with my function GET_MAC_ADRESS_FROM_VBOX_FILE which cause problem. Perhaps it is the function itself which has problem.
I shall give news as soon as possible.
Thank you for helping.
Bookmarks