KShell
Enumerations | |
enum | Errors { NoError = 0 , BadQuoting , FoundMeta } |
enum | Option { NoOptions = 0 , TildeExpand = 1 , AbortOnMeta = 2 } |
Functions | |
KCOREADDONS_EXPORT QString | joinArgs (const QStringList &args) |
KCOREADDONS_EXPORT QString | quoteArg (const QString &arg) |
KCOREADDONS_EXPORT QStringList | splitArgs (const QString &cmd, Options flags=NoOptions, Errors *err=nullptr) |
KCOREADDONS_EXPORT QString | tildeCollapse (const QString &path) |
KCOREADDONS_EXPORT QString | tildeExpand (const QString &path) |
Detailed Description
Emulates some basic system shell functionality.
- See also
- KStringHandler
Enumeration Type Documentation
◆ Errors
enum KShell::Errors |
Status codes from splitArgs()
Enumerator | |
---|---|
NoError | Success. |
BadQuoting | Indicates a parsing error, like an unterminated quoted string. |
FoundMeta | The AbortOnMeta flag was set and an unhandled shell meta character was encountered. |
◆ Option
enum KShell::Option |
Flags for splitArgs().
- See also
- Options
Enumerator | |
---|---|
TildeExpand | Perform tilde expansion. On Windows, this flag is ignored, as the Windows shell has no equivalent functionality. |
AbortOnMeta | Put the parser into full shell mode and bail out if a too complex construct is encountered. A particular purpose of this flag is finding out whether the command line being split would be executable directly (via KProcess::setProgram()) or whether it needs to be run through a real shell (via KProcess::setShellCommand()). Note, however, that shell builtins are not recognized - you need to do that yourself (compare with a list of known commands or verify that an executable exists for the named command). Meta characters that cause a bail-out are the command separators Further meta characters on *NIX are the grouping symbols opening and closing A further meta character on Windows is the environment variable expansion symbol |
Function Documentation
◆ joinArgs()
QString KShell::joinArgs | ( | const QStringList & | args | ) |
Quotes and joins args
together according to system shell rules.
If the output is fed back into splitArgs(), the AbortOnMeta flag needs to be used on Windows. On *NIX, no such requirement exists.
See quoteArg() for more info.
- Parameters
-
args a list of strings to quote and join
- Returns
- a command suitable for shell execution
Definition at line 23 of file kshell.cpp.
◆ quoteArg()
Quotes arg
according to system shell rules.
This function can be used to quote an argument string such that the shell processes it properly. This is e.g. necessary for user-provided file names which may contain spaces or quotes. It also prevents expansion of wild cards and environment variables.
On *NIX, the output is POSIX shell compliant. On Windows, it is compliant with the argument splitting code of the Microsoft C runtime and the cmd shell used together. Occurrences of the percent
sign
are replaced with %PERCENT_SIGN%
to prevent spurious variable expansion; related KDE functions are prepared for this.
- Parameters
-
arg the argument to quote
- Returns
- the quoted argument
Definition at line 295 of file kshell_unix.cpp.
◆ splitArgs()
QStringList KShell::splitArgs | ( | const QString & | cmd, |
Options | flags = NoOptions, | ||
Errors * | err = nullptr ) |
Splits cmd
according to system shell word splitting and quoting rules.
Can optionally perform tilde expansion and/or abort if it finds shell meta characters it cannot process.
On *NIX the behavior is based on the POSIX shell and bash:
- Whitespace splits tokens
- The backslash quotes the following character
- A string enclosed in single quotes is not split. No shell meta characters are interpreted.
- A string enclosed in double quotes is not split. Within the string, the backslash quotes shell meta characters - if it is followed by a "meaningless" character, the backslash is output verbatim.
- A string enclosed in $'' is not split. Within the string, the backslash has a similar meaning to the one in C strings. Consult the bash manual for more information.
On Windows, the behavior is defined by the Microsoft C runtime. Qt and many other implementations comply with this standard, but many do not.
- Whitespace splits tokens
- A string enclosed in double quotes is not split
- 2N double quotes within a quoted string yield N literal quotes. This is not documented on MSDN.
- Backslashes have special semantics iff they are followed by a double quote:
- 2N backslashes + double quote => N backslashes and begin/end quoting
- 2N+1 backslashes + double quote => N backslashes + literal quote
If AbortOnMeta is used on Windows, this function applies cmd shell semantics before proceeding with word splitting:
- Cmd ignores all special chars between double quotes. Note that the quotes are not removed at this stage - the tokenization rules described above still apply.
- The
circumflex
is the escape char for everything including itself.
- Parameters
-
cmd the command to split flags operation flags, see Option err if not NULL, a status code will be stored at the pointer target, see Errors
- Returns
- a list of unquoted words or an empty list if an error occurred
Definition at line 46 of file kshell_unix.cpp.
◆ tildeCollapse()
Performs tilde collapse on path
.
If path did not start by the user homedir returns path unchanged.
- Parameters
-
path the path to tilde-collpase
- Returns
- the collapsed path
- Since
- 5.67
Definition at line 59 of file kshell.cpp.
◆ tildeExpand()
Performs tilde expansion on path
.
Interprets "~/path" and "~user/path". If the path starts with an escaped tilde ("\~" on UNIX, "^~" on Windows), the escape char is removed and the path is returned as is.
Note that if path
starts with a tilde but cannot be properly expanded, this function will return an empty string.
- Parameters
-
path the path to tilde-expand
- Returns
- the expanded path
Definition at line 41 of file kshell.cpp.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Sun Nov 17 2024 19:29:50 by doxygen 1.12.0 written by Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.