-
Notifications
You must be signed in to change notification settings - Fork 31
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
gportay
wants to merge
3
commits into
savoirfairelinux:master
Choose a base branch
from
gportay:add-shell-and-exec-commands
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Add shell and exec commands #118
gportay
wants to merge
3
commits into
savoirfairelinux:master
from
gportay:add-shell-and-exec-commands
Commits on Dec 1, 2023
-
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.
Configuration menu - View commit details
-
Copy full SHA for 6d77092 - Browse repository at this point
Copy the full SHA 6d77092View commit details -
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
Configuration menu - View commit details
-
Copy full SHA for 6ea37b3 - Browse repository at this point
Copy the full SHA 6ea37b3View commit details -
cqfd: add common shells as command
This are convenient short hands for: CQFD_SHELL=/bin/bash cqfd shell
Configuration menu - View commit details
-
Copy full SHA for d9a715c - Browse repository at this point
Copy the full SHA d9a715cView commit details
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.