code: def set_using_login_shells(val: bool):
      """Choose between login and non-interactive shells.
  
      Non-interactive shells have the benefit of receiving less output from
      subcommands (since progress bars and TTY control codes are not printed).
      Sometimes this can be significant since e.g. `pip install` prints
      hundreds of progress bar lines when downloading.
  
      Login shells have the benefit of working very close to how a proper bash
      session does, regarding how scripts execute and how the environment is
      setup. This is also how all commands were ran in the past. The only reason
      to use login shells over non-interactive shells is if you need some weird
      and non-robust tool to work.
  
      Args:
          val: If true, login shells will be used to run all commands.
      """
      _config["use_login_shells"] = val
  
imports: import hashlib
  import json
  import logging
  import os
  import subprocess
  import sys
  import time
  from getpass import getuser
  from shlex import quote
  from typing import Dict, List
  import click
  from ray.autoscaler._private.cli_logger import cf, cli_logger
  from ray.autoscaler._private.constants import AUTOSCALER_NODE_SSH_INTERVAL_S, AUTOSCALER_NODE_START_WAIT_S, DEFAULT_OBJECT_STORE_MAX_MEMORY_BYTES, DEFAULT_OBJECT_STORE_MEMORY_PROPORTION
  from ray.autoscaler._private.docker import check_bind_mounts_cmd, check_docker_image, check_docker_running_cmd, docker_start_cmds, with_docker_exec
  from ray.autoscaler._private.log_timer import LogTimer
  from ray.autoscaler._private.subprocess_output_util import ProcessRunnerError, is_output_redirected, run_cmd_redirected
  from ray.autoscaler.command_runner import CommandRunnerInterface
label_desc: Use image node_id 4 for calling a global function with example usage: set_using_login_shells(val) without return types