Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add shell and exec commands #118

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Commits on Dec 1, 2023

  1. cqfd: add shell command

    This adds the shell command to run a $CQFD_SHELL (or /bin/sh) command
    from within the container.
    
    It is a convenient frontend to "cqfd run bash", which also respects the
    arguments:
    
    	$ cqfd shell -c 'printf "0=$0,*=$*,#=$#\n"' zero one two three
    	0=zero,*=one two three,#=3
    
    While the run command does not:
    
    	$ cqfd run /bin/bash -c 'printf "0=$0,*=$*,#=$#\n"' zero one two three
    	printf: usage: printf [-v var] format [arguments]
    
    	$ cqfd run /bin/sh -c 'printf "0=$0,*=$*,#=$#\n"' zero one two three
    	0=bash,*=,#=0\n: 1: printf: usage: printf format [arg ...]
    
    Note: The command shell does not run the command= set in the file
    .cqfdrc.
    gportay committed Dec 1, 2023
    Configuration menu
    Copy the full SHA
    6d77092 View commit details
    Browse the repository at this point in the history
  2. cqfd: add exec command

    TL;DR; The command run takes arguments as if they are given to system()
    (i.e. the command_string is intepreted by sh -c). The command shell
    takes arguments as if they are given to execlp($SHELL, ...), and the new
    command exec takes arguments as they are given to execlp() (i.e. for the
    two last, the command is not interpreted by sh; except for the arguments
    that are not simple-quoted and that are subject to get interpreted by
    the current shell). In short:
     - cqfd run -> sh -c "$*"
     - cqfd shell -> sh "$@"
     - cqfd exec -> ssh "$@"
    
    This adds the exec command to run a command from within the container.
    
    The command consists of the exec-program and its arguments (if any), as
    it is given to the C function execlp(). The exec-program could be either
    a binary or a script.
    
    	$ cqfd exec COMMAND [ARGUMENTS...]
    
    It is a distinct CLI to the commands run and shell that both takes a
    command_string as it is given to the C function system() (i.e. given to
    sh -c):
     - cqfd shell has three different forms:
       cqfd shell [command_file [argument...]]
       cqfd shell -c command_string [command_name [argument...]]
       cqfd shell -s [argument...] (requires CQFD_EXTRA_RUN_ARGS=-i for now)
     - cqfd run [-c] [command_string] takes a command_string as specified by
       sh(1) or the command= attribute from the file .cqfdrc.
       Important: the option -c of run is for concatenate and it is
       different to the option -c of sh(1).
    
    Note: The command exec (as the command shell) does not run the command=
    set in the file .cqfdrc.
    
    According to sh(1):
    
    	argument
    
    	The positional parameters ($1, $2, and so on) shall be set to
    	arguments, if any.
    
    	command_file
    
    	The pathname of a file containing commands. If the pathname
    	contains one or more <slash> characters, the implementation
    	attempts to read that file; the file need not be executable. If
    	the pathname does not contain a <slash> character:
    	* The implementation shall attempt to read that file from the
    	  current working directory; the file need not be executable.
    	* If the file is not in the current working directory, the
    	  implementation may perform a search for an executable file
    	  using the value of PATH, as described in Section 2.9.1.1,
    	  Command Search and Execution.
    
    	Special parameter 0 (see Section 2.5.2, Special Parameters)
    	shall be set to the value of command_file. If sh is called using
    	a synopsis form that omits command_file, special parameter 0
    	shall be set to the value of the first argument passed to sh
    	from its parent (for example, argv[0] for a C program), which is
    	normally a pathname used to execute the sh utility.
    
    	command_name
    
    	A string assigned to special parameter 0 when executing the
    	commands in command_string. If command_name is not specified,
    	special parameter 0 shall be set to the value of the first
    	argument passed to sh from its parent (for example, argv[0] for
    	a C program), which is normally a pathname used to execute the
    	sh utility.
    
    	command_string
    
    	A string that shall be interpreted by the shell as one or more
    	commands, as if the string were the argument to the system()
    	function defined in the System Interfaces volume of
    	POSIX.1‐2017. If the command_string operand is an empty string,
    	sh shall exit with a zero exit status.
    
    Fixes: savoirfairelinux#99
    gportay committed Dec 1, 2023
    Configuration menu
    Copy the full SHA
    6ea37b3 View commit details
    Browse the repository at this point in the history
  3. cqfd: add common shells as command

    This are convenient short hands for:
    
    	CQFD_SHELL=/bin/bash cqfd shell
    gportay committed Dec 1, 2023
    Configuration menu
    Copy the full SHA
    d9a715c View commit details
    Browse the repository at this point in the history