hpcflow.sdk.submission.shells.bash.Bash#

class hpcflow.sdk.submission.shells.bash.Bash(*args, **kwargs)#

Bases: Shell

Class to represent using bash on a POSIX OS to generate and submit a jobscript.

Methods

format_save_parameter

format_stream_assignment

get_version_info

Get bash version information.

prepare_JS_path

prepare_element_run_dirs

process_JS_header_args

wrap_in_subshell

Format commands to run within a subshell.

Attributes

DEFAULT_EXE

JS_DIRECT_HEADER

JS_ELEMENT_ARRAY

JS_ELEMENT_LOOP

JS_ENV_SETUP_INDENT

JS_EXT

JS_HEADER

JS_INDENT

JS_MAIN

JS_SCHEDULER_HEADER

JS_SHEBANG

executable

linux_release_file

shebang_executable

DEFAULT_EXE = '/bin/bash'#
JS_DIRECT_HEADER = '{shebang}\n\n{header}\n'#
JS_ELEMENT_ARRAY = 'JS_elem_idx=$(({scheduler_array_item_var} - 1))\n{main}\ncd $WK_PATH\n'#
JS_ELEMENT_LOOP = 'for ((JS_elem_idx=0;JS_elem_idx<{num_elements};JS_elem_idx++))\ndo\n{main}\ndone\ncd $WK_PATH\n'#
JS_ENV_SETUP_INDENT = '    '#
JS_EXT = '.sh'#
JS_HEADER = '{workflow_app_alias} () {{\n(\n{env_setup}{app_invoc}\\\n    --config-dir "{config_dir}"\\\n    --config-invocation-key "{config_invoc_key}"\\\n    "$@"\n)\n}}\n\nWK_PATH=`pwd`\nWK_PATH_ARG=$WK_PATH\nSUB_IDX={sub_idx}\nJS_IDX={js_idx}\nEAR_ID_FILE="$WK_PATH/artifacts/submissions/${{SUB_IDX}}/{EAR_file_name}"\nELEM_RUN_DIR_FILE="$WK_PATH/artifacts/submissions/${{SUB_IDX}}/{element_run_dirs_file_path}"\n'#
JS_INDENT = '  '#
JS_MAIN = 'elem_need_EARs=`sed "$((${{JS_elem_idx}} + 1))q;d" $EAR_ID_FILE`\nelem_run_dirs=`sed "$((${{JS_elem_idx}} + 1))q;d" $ELEM_RUN_DIR_FILE`\n\nfor ((JS_act_idx=0;JS_act_idx<{num_actions};JS_act_idx++))\ndo\n\n  need_EAR="$(cut -d\'{EAR_files_delimiter}\' -f $(($JS_act_idx + 1)) <<< $elem_need_EARs)"\n  if [ "$need_act" = "0" ]; then\n      continue\n  fi\n\n  run_dir="$(cut -d\'{EAR_files_delimiter}\' -f $(($JS_act_idx + 1)) <<< $elem_run_dirs)"\n  cd $WK_PATH/$run_dir\n\n  {workflow_app_alias} internal workflow $WK_PATH_ARG write-commands $SUB_IDX $JS_IDX $JS_elem_idx $JS_act_idx\n  {workflow_app_alias} internal workflow $WK_PATH_ARG set-ear-start $SUB_IDX $JS_IDX $JS_elem_idx $JS_act_idx\n  . {commands_file_name}\n  {workflow_app_alias} internal workflow $WK_PATH_ARG set-ear-end $SUB_IDX $JS_IDX $JS_elem_idx $JS_act_idx\n\ndone\n'#
JS_SCHEDULER_HEADER = '{shebang}\n\n{scheduler_options}\n{header}\n'#
JS_SHEBANG = '#!{shebang_executable} {shebang_args}'#
property executable: List[str]#
format_save_parameter(workflow_app_alias, param_name, shell_var_name)#
format_stream_assignment(shell_var_name, command)#
get_version_info(exclude_os=False)#

Get bash version information.

Parameters:

exclude_os (bool | None) – If True, exclude operating system information.

Return type:

Dict

property linux_release_file#
prepare_JS_path(js_path)#
Parameters:

js_path (Path) –

Return type:

str

prepare_element_run_dirs(run_dirs)#
Parameters:

run_dirs (List[List[Path]]) –

Return type:

List[List[str]]

process_JS_header_args(header_args)#
Parameters:

header_args (Dict) –

Return type:

Dict

property shebang_executable: List[str]#
wrap_in_subshell(commands)#

Format commands to run within a subshell.

This assumes commands ends in a newline.

Parameters:

commands (str) –

Return type:

str