|
|
|
/*
|
|
|
|
This file is part of the KDE libraries
|
|
|
|
|
|
|
|
Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org>
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Library General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Library General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
#ifndef _KSHELL_H
|
|
|
|
#define _KSHELL_H
|
|
|
|
|
|
|
|
#include <tqstring.h>
|
|
|
|
#include <tqstringlist.h>
|
|
|
|
#include "tdelibs_export.h"
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \namespace KShell
|
|
|
|
* Provides some basic POSIX shell and bash functionality.
|
|
|
|
* @see KStringHandler
|
|
|
|
*
|
|
|
|
* @since 3.2
|
|
|
|
*/
|
|
|
|
namespace KShell {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Flags for splitArgs().
|
|
|
|
*/
|
|
|
|
enum Options {
|
|
|
|
NoOptions = 0,
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Perform tilde expansion.
|
|
|
|
*/
|
|
|
|
TildeExpand = 1,
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Bail out if a non-quoting and not quoted shell meta character is encoutered.
|
|
|
|
* Meta characters are the command separators @p semicolon and @p ampersand,
|
|
|
|
* the redirection symbols @p less-than, @p greater-than and the @p pipe @p symbol,
|
|
|
|
* the grouping symbols opening and closing @p parens and @p braces, the command
|
|
|
|
* substitution symbol @p backquote, the generic substitution symbol @p dollar
|
|
|
|
* (if not followed by an apostrophe), the wildcards @p asterisk and
|
|
|
|
* @p question @p mark, and the comment symbol @p hash @p mark. Additionally,
|
|
|
|
* a variable assignment in the first word is recognized.
|
|
|
|
*/
|
|
|
|
AbortOnMeta = 2
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Status codes from splitArgs()
|
|
|
|
*/
|
|
|
|
enum Errors {
|
|
|
|
/**
|
|
|
|
* Success.
|
|
|
|
*/
|
|
|
|
NoError = 0,
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Indicates a parsing error, like an unterminated quoted string.
|
|
|
|
*/
|
|
|
|
BadQuoting,
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The AbortOnMeta flag was set and a shell meta character
|
|
|
|
* was encoutered.
|
|
|
|
*/
|
|
|
|
FoundMeta
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Splits @p cmd according to POSIX shell word splitting and quoting rules.
|
|
|
|
* Can optionally perform tilde expansion and/or abort if it finds shell
|
|
|
|
* meta characters it cannot process.
|
|
|
|
*
|
|
|
|
* @param cmd the command to split
|
|
|
|
* @param flags operation flags, see Options
|
|
|
|
* @param err if not NULL, a status code will be stored at the pointer
|
|
|
|
* target, see Errors
|
|
|
|
* @return a list of unquoted words or an empty list if an error occurred
|
|
|
|
*/
|
|
|
|
TDECORE_EXPORT TQStringList splitArgs( const TQString &cmd, int flags = 0, int *err = 0 );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Quotes and joins @p args together according to POSIX shell rules.
|
|
|
|
*
|
|
|
|
* @param args a list of strings to quote and join
|
|
|
|
* @return a command suitable for shell execution
|
|
|
|
*/
|
|
|
|
TDECORE_EXPORT TQString joinArgs( const TQStringList &args );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Same as above, but $'' is used instead of '' for the quoting.
|
|
|
|
* The output is suitable for splitArgs(), bash, zsh and possibly
|
|
|
|
* other bourne-compatible shells, but not for plain sh. The advantage
|
|
|
|
* is, that control characters (ASCII less than 32) are escaped into
|
|
|
|
* human-readable strings.
|
|
|
|
*
|
|
|
|
* @param args a list of strings to quote and join
|
|
|
|
* @return a command suitable for shell execution
|
|
|
|
*/
|
|
|
|
TDECORE_EXPORT TQString joinArgsDQ( const TQStringList &args );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Quotes and joins @p argv together according to POSIX shell rules.
|
|
|
|
*
|
|
|
|
* @param argv an array of c strings to quote and join.
|
|
|
|
* The strings are expected to be in local-8-bit encoding.
|
|
|
|
* @param argc maximal number of strings in @p argv. if not supplied,
|
|
|
|
* @p argv must be null-terminated.
|
|
|
|
* @return a command suitable for shell execution
|
|
|
|
*/
|
|
|
|
TDECORE_EXPORT TQString joinArgs( const char * const *argv, int argc = -1 );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Performs tilde expansion on @p path. Interprets "~/path" and
|
|
|
|
* "~user/path".
|
|
|
|
*
|
|
|
|
* @param path the path to tilde-expand
|
|
|
|
* @return the expanded path
|
|
|
|
*/
|
|
|
|
TDECORE_EXPORT TQString tildeExpand( const TQString &path );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Obtain a @p user's home directory.
|
|
|
|
*
|
|
|
|
* @param user The name of the user whose home dir should be obtained.
|
|
|
|
* An empty string denotes the current user.
|
|
|
|
* @return The user's home directory.
|
|
|
|
*/
|
|
|
|
TDECORE_EXPORT TQString homeDir( const TQString &user );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* _KSHELL_H */
|