GB2446608A - A command shell for a distributed computer system - Google Patents

A command shell for a distributed computer system Download PDF

Info

Publication number
GB2446608A
GB2446608A GB0703112A GB0703112A GB2446608A GB 2446608 A GB2446608 A GB 2446608A GB 0703112 A GB0703112 A GB 0703112A GB 0703112 A GB0703112 A GB 0703112A GB 2446608 A GB2446608 A GB 2446608A
Authority
GB
United Kingdom
Prior art keywords
command
user
shell
machines
input
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
GB0703112A
Other versions
GB2446608B (en
GB0703112D0 (en
Inventor
Paul Tapper
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to GB0703112A priority Critical patent/GB2446608B/en
Publication of GB0703112D0 publication Critical patent/GB0703112D0/en
Publication of GB2446608A publication Critical patent/GB2446608A/en
Application granted granted Critical
Publication of GB2446608B publication Critical patent/GB2446608B/en
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • G06F9/45512Command shells
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Stored Programmes (AREA)

Abstract

A shell control program 401 is deployed on a controlling computer 402 of a distributed computer system. The shell control program reads commands input from a command source, either user input or script, and passes this input to a parser which generates parsed code for execution by shell slave processes 404. The shell control program also determines which shell slave processes are required to execute a command. This may involve a plurality of shell slave processes on a plurality of machines or a single machine. Once the shell control program has identified the type and location for the required shell slave processes it determines if the required shell slave processes are already present in the system and if not creates them. Instructions for executing parts of the command are then distributed to the identified shell slave processes to complete the execution and return results to the shell control program. The shell control program can be completely platform independent using JAVA. Each of the shell slave processes can have multiple input and output data streams routed directly or indirectly between processes in the network. Pseudo terminal instances (507, figure 5) may be set up by the shell slave processes allow command processes (501, 502, 503) to be processed on remote computers as they would be had they been executed on the controlling computer.

Description

MULTI-MACHINE SHELL
BACKGROUND OF THE INVENTION
Field Of Invention
The present invention relates to methods for operating a plurality of computers in a similar maimer to the way in which a shell or command interpreter operates a single machine.
Prior Art
Hereinafter the term shell will be used to refer to a shell or command interpreter. Examples of shells in the prior art include "command.com" supplied with Microsoft DOSTM, "bash" used on UnixTM and LinuxTM systems and "explorer.exe", the graphical user interface supplied with Microsoft Windows XPTM.
Shells and Other Software A general purpose computer system runs several pieces of software which can be viewed as providing different levels of functionality. This is illustrated in figure 1. Here the level of functionality is determined by how abstract a task is compared to the actual functions of the computer hardware. It does not necessarily relate to the complexity of the software.
The operating system, including device drivers (101), is the lowest level software component.
The operating system is concerned with for example opening and closing files, launching and managing applications and interfacing with the hardware (102). The operating system provides an application programming interface for higher level software components (103).
The functions in this interface are known as system calls. Figure 1 shows how higher level software builds (104) on lower level software to perform functions which are both more abstract and more directly useful to the user.
Because the operating system is accessed with system calls it cannot be used directly by a user. A shell (105) is an application which provides a user interface to the basic functionality supported by the operating system. As its functions are fairly close to those provided by the operating system it is considered to be a low level application.
A shell can be text based, like for example "bash" or "csh", or provide a graphical user interface like "explorer.exe" which displays files and folders under Windows XPTM. Shells may be closely associated with particular operating systems but they are application programs.
Shells are usually designed to work on a particular operating system but in some cases they can be adapted to work on a variety of operating systems. For example, the "bash" shell, originally designed to work on unix-like operating systems can be used under Microsoft Windows XPTM.
Some shells provide additional functionality not directly supported by the underlying operating system. For example "bash" provides commands for storing and retrieving variables, commands for conditionally executing other commands and commands for executing commands several times.
Some shells can accept a sequence of commands from a file. This capability, together with the additional commands mentioned above mean the shell can also act as an interpreter for a simple programming language. A program written for a shell is known as a shell script or batch file (106).
Terminals and Terminal Emulators Historically interaction with a central computer was done via a terminal. This is illustrated in figure 2. This diagram illustrates a physical terminal (201), for example a VT32OTM made by DigitalTM, being used with a unix-like operating system. The terminal is connected to a port on the computer (202) and this port is managed by part of the operating system called the terminal driver (203). This terminal driver provides a standardised interface to the physical terminal (204) which an application program (205) can interact with. One such application program would be a shell.
Figure 3 illustrates a modem computing environment where physical terminals are usually replaced with terminal emulation programs (301, 302) running on desktop computers (303) or on the central computer itself (304). The terminal emulation software sends and receives characters and displays characters to the user in the same way a physical terminal would do.
In order to allow application programs to use this emulated terminal in the same way as they would use a real terminal an operating system component known as a pseudo terminal (305) is used. The pseudo terminal provides a terminal interface to the application program (306) in the same way the terminal driver would do if a physical terminal were used. The pseudo terminal then presents a second interface to the terminal emulation program to allow it to send characters to and receive characters from the operating system in the same way a physical terminal would send characters to and receive characters from the computer hardware and terminal driver.
Running Process on Remote Systems Several technologies are available for running a program on a remote computer from a local computer. One example under UnixTM and unix-like operating systems is "rsh". This allows users to either start an interactive shell on a remote machine or to launch a process on a remote machine making the results available on the first machine. The use of "rsh" can be seen in figure 3. The system Consists of a daemon process (307) and a client component (308).
Other techniques used at a programming level to access remote systems include Remote Procedure Calls (RPC), Remote Method Invocation (RMI), etc. Z) Shared File Systems Several technologies are available to make files from one computer available to other computers on a network. One such example is Network File System (NFS) originally developed by Sun MicrosystemsTM, widely used on UnixTM and unix-like operating systems.
Another example is the Common Internet File System (CIFS), widely used by MicrosoftTM.
User Accounts Modem operating systems maintain separate accounts for different users. Accounts are also used for different functions, for example a system account may be used for running processes related to the operating system. Different accounts may have different access privileges. Users may sometimes need to access multiple accounts on the same system or need to use different account credentials on different systems for a variety of reasons.
Limitations of Current Shells Current shell software is designed to perform operations on the machine on which it is running. Commands which deal with multiple machines are not supported directly by current shells. There are two main aspects to accessing remote machines: access to files and the ability to run processes.
Files on remote machines can be accessed using shared file systems as described above.
However, files on a remote machine are not typically available in the same way on a remote machine as they are on a local machine. When accessing files remotely it may be that only a subset of the files are available and access rights may be different to those obtained when working on the machine directly. Furthermore, the paths used for a particular file may be different from machine to machine. Also note that such remote file access is a function of the underlying operating system and not a function of the shell itself.
Current shells do not directly launch processes on remote machines. instead remote processes are typically started by a separate program designed for this purpose which is, as far as the shell is concerned, just another local command. For example, when using the "bash" shell on a UnixTM system a user may use the "rsh" command to start a process on another machine.
The "rsh" command is not part of the bash shell and running a remote command like this is not as easy as running a command locally. When entering the name or arguments of the command to run on the remote machine for example, command line completion is not available as it would be for a local command. The shell cannot provide facilities like command line completion because it is not directly operating on the remote machine.
The problems of remote file access and remote process execution compound one another because any view of the remote file system available to the user is likely to be different from the file system view which will be available to the remote process. Users must understand and remember the relationship between the two sets of file systems when entering commands which involve a remote machine and files which can be seen from both machines.
Shells are also limited in the way they can handle multiple user accounts. Although the operating system may allow some flexibility in mapping account names on remote file systems, shells themselves are currently designed to work directly with only one set of user credentials. As with remote process execution, separate programs can be used to launch processes with different account credentials but this method is difficult to use. Under UnixTM for example the "su" command can be used to launch a program using a different user account.
Again the shell will not be fully aware of the environment under which the new command will be launched and may not be able to provide correct completions for the command and arguments etc.
S
Another problem with both running processes on remote machines and running processes under different accounts on the same machine is that launching processes this way may require passwords. These passwords may be required each time the command is executed and the password prompting process may interfere with the intended operation of the overall command.
Yet another problem with current shells which use a text based user interface is that they do not cope well with running multiple commands simultaneously. For example, using the bash shell, commands can be put into the "background" allowing other commands to be launched.
This has several problems: (1) The output from multiple background processes is mixed on the screen.
(2) Output from background tasks gets mixed with the user input required to launch further tasks making commands being entered unreadable.
(3) Background tasks are stopped when they attempt to obtain input from the user. Users must enter further commands to switch between processes. Also a process designed to perform processing whilst simultaneously being responsive to user input may not perform correctly as all processing is likely to be stopped once user input is requested.
(4) Commands which have been launched with different user credentials (using an auxiliary command to alter these as described above) may not be able to interact correctly with the terminal because of the ownership and access permissions associated with the terminal, pseudo terminal or equivalent.
SUMMARY OF THE INVENTION
The current invention consists of methods to be used in a shell for operating a plurality of machines rather than operating primarily one machine. Some of these methods may also be applicable in the wider context of computer software rather than just computer shells. Unlike methods used in previous shell environments, with the current invention, all accessible machines are treated equally and can play a part in any command regardless of their operating system or access method. Multiple sets of user credentials are also supported. Using the current invention a single command can involve a plurality of different processes operating on specific machines under specific user credentials all working together. The invention addresses all of the limitations of current shells discussed above using a combination of novel techniques which will be described below.
BREIF DESCRIPTION OF THE DRAWINGS
Figure 1 illustrates the role of a shell in the prior art and shows how it relates to other software.
Figure 2 illustrates the connection of physical terminals to a central computer, showing the hardware and software components involved.
Figure 3 illustrates the components involved in emulating physical terminals in a more modem computing environment.
These first three figures represent the prior art and are discussed above.
Figure 4 illustrates the basic architecture of part of one embodiment of the current invention.
Figure 5 shows an example of a command launched by one embodiment of the current invention.
Figure 6 shows a grammar which could be used for text based command input with one embodiment of the current invention.
Figure 7 shows one embodiment of a user interface which could be used with the current invention.
DETAILED DESCRIPTION
Overall Architecture The architecture of one embodiment of the current invention is shown in figure 4. A shell control program (401) is deployed on a controlling machine (402). This program is designed to process commands from a command source (403). The command source may be for example a user typing commands interactively or a script. The shell control program may or may not have a graphical user interface. If the program has a graphical user interface this may be displayed whenever the program runs or only when it is run for a certain purpose e.g. displayed for interactive use and not displayed when the command source is a script. In another embodiment several control programs are provided for processing commands from different types of command source. In yet another embodiment, only a single type of command source is supported.
The shell control program reads input from the command source and passes this input to a parser. Parsing techniques for commands are well known and tools are available to assist in generating parsing code, for example "ANTLR" or "Bison".
Command execution is carried out at operating system level by means of one or more shell slave processes (404). When a command or group of commands has been parsed and is ready for execution the shell control program detennines which shell slave processes are required in order to launch the command. This will in the general case involve a plurality of shell slave processes on a plurality of machines. A plurality of shell slave processes may also be required on a single machine. One possible reason for this could be that the command involves elements running under more than one set of user credentials on that machine. Whether several slave processes are required on a single machine and the circumstances under which they are required will depend on the particular embodiment.
Once the shell control program has identified the type and location of the shell slave processes which will be required to execute the command, this list of required shell slave processes is checked against a list of shell slave processes currently deployed by the shell control program.
Where required shell slave programs are not already running the shell control program will create the extra shell slave programs required to launch the command. Many methods exist for a program such as the shell control program to launch a process on a remote machine and any appropriate method can be used. In one embodiment a plurality of methods are implemented and the method may be either specified by the user or methods may be attempted in a prescribed order until one method succeeds. One such method is to initiate a connection to the remote machine using a standard protocol such as ftelnetu, "rsh", or "ssh" and execute the shell slave process using commands appropriate to the protocol and target operating system.
Another such method is to have a daemon or service running on the remote machines which will either create the shell slave processes as required or perform as a shell slave process directly. Other such methods include using remote procedure calls (RPC) or remote method invocation (RMI) etc. Having identified and set up as necessary the shell slave process required for the command each shell slave process is given instructions for executing the part of the command for which it is required. In the current embodiment this would be a series of low level commands for dealing with processes, files, network connections, pseudo terminals etc. The set of such commands includes commands for most if not all of the interactions with the host operating system needed by the shell. The command set isolates the shell control program from the specific operating system used by the host, allowing the shell control program to interact with many different operating systems with a single protocol. The command set may also include commands not directly supported by operating systems in general but which, for reasons of efficiency, are best camed out on the host operating system. An example of such a command would be searching for files matching a particular regular expression.
Embodiments of the processes described above are possible in many languages, however it is noted that choosing a low level language such as C for the shell slave program and a platform independent language such as Java for the shell control program has particular advantages.
Such a combination allows full and easy access to system calls in the shell slave process, which can be a relatively simple program and can be tailored to different operating systems individually. The more complex shell control program can then be completely platform independent, isolated from the operating systems by the shell slave command set as described above.
In the current embodiment the commands given to the shell slave process set up a network of command processes running on the machines which together carry out the command read from the command source. An example of such a network is shown in figure 5. These processes include processes directly specified in the command (501, 502, 503) and any support processes (504) required to copy input and output data to and from network connections or to and from pseudo terminal instances set up by the shell slave processes etc. Such requirements may vary from operating system to operating system. Each process in the network of command processes may have multiple input and output data streams (505). Each data stream may be routed directly or indirectly over the network to another process or be sent to or read from a local file. Input and output data streams may also be routed directly or indirectly to machines over standard protocols such as http, ftp etc. They may also be routed to or sourced from the user. In the current embodiment these processes, once set up, run ic' independently from the shell slave processes and are controlled during execution by the shell control program via independent control signals sent over combined signal and data channels (506). These channels also contain data being sent to or from the user.
After setting up the network of processes (figure 5), the shell slave processes (figure 4) remain on the machines ready to process further commands. These have been omitted from figure 5 for clarity. It is noted that these processes may either be the original shell slave processes or replacement processes created by the original shell slave process. It is also noted that the machines shown in figure 5 need not be running the same operating system and that the network shown is just one of many possible networks which could be produced by the current embodiment.
One problem with setting up this kind of network of command processes is that many existing programs include code to determine whether or not their input or output streams are connected to some kind of terminal and alter their behaviour as a result of this. This code may be part of the program concerned or may be part of a runtime library used by the program. For example, if connected to a terminal program output may be regularly flushed to the screen rather than buffered, a text based user interface may be supported, etc. The current embodiment solves this problem in a multi-host environment by: determining which data streams will eventually be sent back to or originate from the user; grouping these input and output streams into groups which can share a pseudo terminal instance or equivalent; creating a pseudo terminal or equivalent for each group and routing all such streams through that pseudo terminal or equivalent (507). In this way all data streams which will eventually come from or go to the user interface appear to the program concerned to be connected to a user interface. The programs should then behave as the programmers intended and as expected by the user even though they may not have been designed to run with other programs on remote machines in this manner. Allocating pseudo terminals or their equivalents in this way ensures that each command process being executed has the same kind of environment it would have if it were run under a prior art single machine single user shell such as "bash" or "comniand.exe". This is different to the way current shells run processes in that current shells do not allocate pseudo terminals at all. Instead they simply use the single pseudo terminal to which they are connected by whatever process created the shell. Programs run by these prior art shells also make use of the same pseudo terminal.
A Grammar for Text-Based Command Input A grammar for the current embodiment will now be described. Although some aspects of the current invention are described by reference to this grammar it will be understood that the details of the grammar can vary from embodiment to embodiment and in some embodiments of the current invention commands may be represented in graphical form and hence not require a grammar at all. Figure 6 shows the grammar of the current embodiment in a format similar to Extended Backus-Naur Form (EBNF). Square brackets indicate optional elements and curly brackets indicate elements which may be optionally repeated any number of times.
A vertical bar indicates that the elements before and after the bar are alternatives, round brackets indicate precedence and the ":=" and ";" symbols indicate a definition and the end of the rule respectively. The capitalised words represent simple groups of characters and symbols which could be derived from characters entered by the user with a lexer. Whether these particular rules or any other set of rules are actually implemented with a lexer rather than being implemented in the parser is not important. Where rules are defined in italics this is an informal description of a rule given in place of an formal definition for simplicity.
It is noted that the grammar given in figure 6 is intended to explain the language used by the current embodiment rather than completely and unambiguously specify the language.
Implementation of the language from the grammar specified in figure 6 would require some additional code to disambiguate parts of the grammar in a sensible way and would also require rules to handle issues such as white space and quoting. Many valid approaches to these issues can be found in the prior art. For most ambiguities arising in this grammar a suitable disambiguation consists of remaining within or repeating the current rule or sub-rule rather than moving on to the next rule. This is sometimes referred to as making the rules "match greedily".
Uffi-Based Syntax The basic scheme for identifying files and similar objects across multiple host machines in this grammar is the un, shown in rule P. The un in this grammar is similar to a URI (Uniform Resource Identifier) in the prior art but differs in the way in which various elements may be omitted. These differences make it more suitable for entering commands with a minimum number of keystrokes. Apart from the syntactic elements, the rule contains four optional elements: a scheme (rule I); an authority (rule J); an address (rule K) and an absolute path (rule M). The scheme specified in rule I consists of a word followed by a colon. In a URI in the prior art, the format of the text following the specification of the scheme is specific to that scheme. Although this could be incorporated in a different embodiment the grammar currently being described is more limited in the syntax following the scheme for the sake of clarity. The authority (rule J) is used to specify a user name, a password or both. Both user name and password are optional. If the password is given it appears after the user name, if present, and in all cases immediately after a colon symbol. The address (rule K) is similar to the authority rule but contains a machine name and port rather than a user name and password. Again, both elements are optional but if a port is specified it must follow a colon symbol with both the colon symbol and the port being after the machine name, if present. A machine name could be specified by fully qualified domain name, a local machine name, an IP address or some other means. A port could be specified as a number, a service name which can be translated into a number or some other means. The absolute path given in rule M consists of an initial slash symbol followed by an alternating sequence of text elements and slash symbols. The grammar allows slash symbols other than the first slash symbol to be repeated without any change of meaning, this can be seen in rule N. Although this is not a complete specification of the language, as mentioned above, the current embodiment uses three disanibiguation rules for the un (rule P) which are a more significant part of this embodiment than other such rules. These rules are: (I) if any part of the address (rule K) is specified then either the "AT" or "SLASH SLASH" parts of rule P must be included; (2) if any part of the authority (rule J) is included then the "AT" part of rule P must be included; (3) if any part of the authority (rule J) is included and a scheme (rule I) is given then the "SLASH SLASH" part of rule P must be included.
These three rules allow the meanings of various partially specified uris to be uniquely determined.
This embodiment uses the IJRI-like syntax described above to contain parameters like schemes, user names, passwords, machine names, ports and paths. It will be understood, however, that this is not the only syntax which could be used to contain these parameters and a variety of suitable syntaxes may be used in alternative embodiments.
Parameters and Defaults The current embodiment employs a concept referred to as a "context". The context is a collection of all the information and settings needed to fuily specify where and how to run a particular command or group of commands. In the current embodiment the context can specify the following information: a protocol; a port number; a set of user credentials including group identifiers, security tokens and passwords where applicable; a target machine; a current working directory; a set of environment variables; a search path for locating commands. Note that this information may not all be stored specifically for each context but may be derived from default settings or obtained via mappings from contexts of a particular type to groups of settings. All that is required is that the information can be determined from the context. Note also that other information may be included in the context where appropriate in any particular embodiment or some of the information listed above may be omitted.
Different operating systems may also introduce requirements for further information. In the current embodiment, a context is associated with a unique label. The label can be empty, but there is only one context per label and only one context associated with an empty label. Rule H shows how a context is specified in the grammar of figure 6 as a context label (WORD) follows by a hash symbol.
A Generalized Resource The concept of a "resource" in the current embodiment is something which can be specified not just by a un but by the more general syntax of rule G. This rule uses both a context and either a un as described above or a relative path to specify a particular file, command, directory or similar. Here commands could include executable files; commands built into the shell program or aliases where an alias is a name is linked to another command. Rule G is composed of an optional context specification followed by a relative path or un. The context label is separated from the path or un with a hash symbol (rule H as described above). Clearly a variety of symbols could be used in place of the hash symbol in alternative embodiments.
When a un is used the parameters in the un can override most but notnecessarily all of the information contained in the context. The information in the context acts as a set of default settings. Note that other default settings may be used in addition to the context. Note also that all elements are optional in rule G. If the context is omitted then the current default context Is-will apply. If all elements are empty the resource specified will be the current working directory of the current default context. Where a relative path is used (rule L) this path is relative to the current working directory in the context specified or, if no context is specified, the default context.
Search Paths Where rule L is used to specify a resource (from rule G) but only a single word is entered as the relative path this is treated as a special case. Rather than being taken as a relative path and specifying a resource in the current working directory a "search path" is used to locate the resource. This search path may or may not include the current working directory. The search path used is determined by the context. The path could either be contained in the context or there could be a mapping from the set of contexts to a set of paths. In this embodiment the path can contain different types of elements including: directories; wildcard patterns specifying files or directories; built-in commands and aliases. These elements are contained in the path in a set order and are reviewed in that order until one of the elements matches the command entered. Matches could mean that the directory specified contains a file named according to the command entered or it could mean the command entered matches the name of a built in command or matches the name of an alias specified by the user. As a result of searching the path a resource is either uniquely identified as being first on the path or the resource is not found.
Entering Commands At the top level of this grammar, the user enters commands as defined in rule A. There are two types of command, context commands (rule B) and list commands (rule C). A context command is defined in rule B and consists of a context label (WORD) and a resource separated by a percentage symbol. A variety of symbols could be used in place of the percentage symbol in different embodiments. The context label itself is optional, omitting this specifies an empty label as discussed above. The effect of this command is to set up a context with the information specified by the resource and associate it with the given label. This context replaces any previous context associated with that particular label if one existed. The label can now be used to select the context according to rule H. Parameters which may be part of the context but do not form part of a resource (like a set of environment settings or a path) clearly cannot be set up in this way with the current grammar.
However, there are a variety of ways such parameters can be specified or altered. For example a system of defaults could be used where defaults are applied to contexts on a particular machine or group of machines. Such information could be set up in a configuration file or, where a graphical user interface is used, via menus and dialog boxes. Another alternative is to extend the grammar to include the ability to specify this information. In simpler embodiments paths, environment variables and other such parameters could even be fixed for all contexts.
A list command (rule C) is a sequence of pipe commands separated by list operators. Pipe commands will be described below, in the simplest case a list command contains a single pipe command without any list operators. The list operators for this embodiment are shown in rule Q. The operators separate pipe commands which are to be run sequentially under certain conditions. The choice of operator used determines the conditions under which commands following the operator will run. The three alternative operators listed in rule Q will run the commands after the operator under the following conditions respectively: where the previous command succeeded; where the previous command failed; where the previous command completed (succeeded or failed). Success or failure of pipe commands could be determined in various ways. In one embodiment success could be defined as the last process in the pipe returning zero. In another embodiment the criterion for success could be chosen by the user.
Rule C also allows a list operator to be specified at the beginning of the list command. In the current embodiment, this indicates the pipe command is run after and is dependent on a command previously entered by the user. This previously entered command may be already running or may have completed. This effectively continues the list between commands entered at the top level of this grammar (rule A).
Rule D shows the composition of a pipe command. The pipe command consists of a sequence of resources with optional attachments (rule E) separated by pipe operators. In the simplest case a single resource is specified. The pipe command executes one process per resource specified in rule D on the host specified by the resource. Output from each resource preceding a pipe symbol is sent to the input of the resource following that pipe symbol. Processes typically have two output streams called "standard output" and "standard error". The pipe operator used determines which of these streams is or are fed to the input of the next resource.
In the current embodiment the pipe operators shown in rule U specify respectively: the standard output; the standard error; both standard output and standard error. Input to the first resource, if required, is taken from the user via a terminal emulation. The remaining output streams may be redirected as specified by rule F or by default are fed to the terminal emulation via appropriately allocated pseudo terminals or equivalent as described previously.
The redirect (rule F) is one of two types of attachment (rule E) and may be present after the resource and before the pipe operator (rule D). The redirect consists of a redirect operator (rule T) followed by a resource specifying where the output is to be redirected to. This might be, for example, a file on a file system or ftp server or similar.
The second type of attachment specified in rule E is an argument (rule 0). Arguments are passed to the resource being executed as input parameters. An argument can be any piece of text although quoting may be required to disambiguate it from other parts of the grammar.
The argument may be a valid resource specification in which case particular embodiments may perform further operations in order to make the resource given as an argument available to the resource being executed. For example a local copy of a remote file may be made and the argument adjusted to refer to this file, in another embodiment a resource given as an argument is treated purely as text.
The default context is important when entering commands and resources as specified in rule G. There are many ways this could be adjusted but in the current embodiment this is done by entering the context label followed by a hash symbol with no command. This is a special case of a command (rule A), being a just a context (rule H) which is a type of list command (rule C), pipe command (rule D) and resource (rule G). Entering the context label in this way sets the context associated with the label as the default context.
Paths with Host Names or Drive Letters Under some operating systems, for example UnixTM, a full path is sufficient to access any file in the file system. Under other operating systems, for example Windows XPTM, a drive letter or a host name may also be required to specify the file. This does not fit conveniently into a path structure. Several solutions exist to this problem and any appropriate method can be used.
One possible method is to take either the drive letter or host name on which the file resides as the first element of the full path. This is ambiguous where a host name has a single letter. To resolve this, a single letter as the first element of the path is always taken to be a drive.
Although this makes host names with a single letter inaccessible such host names are uncommon and a suitable quoting syntax could be introduced to circumvent this problem if required.
Example Commands
To clarify the operation of the grammar a possible sequence of commands is given below, one command per line: l1 pc%guest@desktoppc/c/workdir ws%mylogin@workstat ion. somedomain.com/ fs%ftp://ftp. somedomain. com/pub/doc This sequence of commands sets up three contexts labelled "pc", "ws" and "fs". The first context, "pc", is set to a directory "workdir" on the C drive of a machine called "desktoppc" with user credentials of guest. This could be a machine running for example Windows XPTM.
The second context, "ws", in this example is set to the root directory of a workstation running unix-like operating system. The third context is set to the "/pub/doc" directory on an ftp server. This will be accessed using the ftp protocol so the operating system could be unknown.
Having entered the three commands above a subsequent command could be: ws#/bin/grep keyword < rs#doc.txt > pc#results.txt && echo ok This command would run the program "/binIgrep" on the workstation, reading input from the file "doc.txt" via ftp and writing the results to a file "results.txt" on the machine "desktoppc".
If the command succeeds then the message "ok" will be printed by the "echo" command. Any messages from the "grep" command present on the standard error stream will be presented to the user as these are not redirected. Since a path to "echo" is not given this command must be found on the search path as described previously.
User Interface As previously mentioned, embodiments of the current invention may as an option have a graphical user interface. One possible embodiment of such a graphical user interface is shown in figure 7. This graphical user interface, described in more detail below, is intended for use with text based command input. Note that other embodiments may use graphics (i.e. diagrams, icons, graphs etc) to facilitate command input or they may be entirely text based and run on a simple terminal or terminal emulator. C)
The user interface of figure 7 is divided up into seven areas. At the top there is a menu area (701) and along the right hand side there is a scroll bar area (702) containing two scroll bars.
The remaining space is divided into, from top to bottom, a tab area (703), a process area (704), a context area (705) a command area (706) and a status area (707). A user types commands into the command area. Interpretation of these commands is affected by a "default context" as described above and information about the default context is displayed in the context area.
The context area may also include graphical controls to allow the default context to be changed using a mouse. Typing the command into the command area is an interactive process whereby the shell control program may assist the user in entering the command by displaying possible options for continuing the command as well as providing feedback on the way the parts of the command already entered have been interpreted. One such method of providing feedback is to show parts of the command entered in different colours. Another such method is to display messages in the status bar. In the current embodiment both methods are employed. When the user has finished the process of entering the command, the user indicates that the command should be executed, for example by pressing the enter key. This creates a process window within the process area. The window is created immediately and all further interactions with or control of that command is done via the process window. The user is now free to run further commands without waiting for the first command to complete. Furthermore, any additional commands entered would be allocated new process areas in the same way. This is an improvement over current shell programs such as "bash" where commands and output from multiple unrelated processes are mixed together on the screen. It is also an improvement in that command input is never mixed with output from running processes.
Space Efficient Input and Output In the current embodiment of this optional graphical user interface the process window (within the process area, 704) can act as a terminal emulator. Normally terminal emulation programs havc a number of rows and columns set by the user, all of which are displayed on the screen. This number of rows should not be confused with rows of history or scroll-back as these lines do not form part of the emulated display. One problem with using current terminal emulators for this application is that each command would require a significant amount of space on the screen. This is problem is solved in the current embodiment by: determining a sensible amount of rows and columns for the emulation (e.g. to cover the entire process area); starting the cursor on the bottom row of the emulated screen; keeping track of which lines on the emulated screen have been written to and having the process window height vary so that any block of unused lines at the top of the emulation are not shown. In this way if the command only produces a few lines of output then the process window will only take up the space required to show those lines. However, if a command uses all the lines being emulated, as for example an interactive command like "vi" under UnixTM would do, then the terminal emulation automatically displays the full number of rows emulated.
Handling Passive and Interactive Commands Another problem with displaying multiple terminal emulators as described above is that some commands require interaction with the user and others do not. When a user enters a command which requires immediate input from the user, for example ftp, it is desirable to allow the user to interact with this command immediately rather than having to first select a window to interact with the command. Where the command does not require input it is desirable for the user's subsequent input to be directed to the command area. However, there is no easy way to identify in advance which commands under which circumstances will require user input. To solve this problem the current embodiment includes a method of detecting when a command is waiting for input from the user and moving the input focus to the command window at this point unless the user is actively performing some other input operation.
This input detection mechanism is implemented in the supporting processes running on each host where parts of the overall command are running. The method of detecting when a process requires input is operating system specific. Under UnixTM or unix-like operating systems one possible embodiment of this mechanism is for the task to read its input from a pseudo terminal where the task itself is a background task for that pseudo terminal. When the task attempts to read input from the pseudo terminal it will be stopped and a signal will be sent to the parent process of that task. On receipt of that signal, the parent process puts the task into the foreground and allows it to continue. A signal is also send to the shell control program indicating that the task requires input. The shell program can then change the input focus to the associated process window if appropriate. An alternative method which may be more suitable for other operating systems is to create the task so that it is reading input from a pipe connected to a supporting process. Operating specific functions can then be used in the supporting process to determine whether input is being read from the other end of the pipe and this information fed back to the shell control program as before.
Whether or not it is appropriate to move the focus may depend on whether the user has done anything else since launching the command, how long the command has been running and other such factors. A visual indication that the task requires input can also be given. Any change in the focus of the user interface can also be indicated visually in some way.
Organising Multiple Commands The scroilbar area (702) contains two scrolibars. The first scrolibar allows the user to scroll the text in a selected terminal window in the same way text is scrolled in current terminal emulation programs, for example "xterm". Note that although the process windows do vary in size depending on the amount of output received as described above, thcy would not normally become larger than the displayable area of the screen. The processes windows can also be resized individually by the user. Output text which does not fit into the resulting areas (i.e. has scrolled off the screen) is therefore accessed with the first scroll bar. The second scroll bar allows the user to scroll the entire set of process windows up and down, allowing access to more terminal windows than will fit into the process area of the gui. Furthermore, the tab area (703) contains tabs which allow the user to group process windows logically. Each process window is assigned to one tab and selecting a tab allows the user to view the set of process windows assigned to it. As an optional feature, each tab may also be associated with a set of default settings for new commands. In this way each tab can become a different environment for the user if required.
Command Completion Command completion means any method of providing the user with, where possible, one or more valid ways to continue entering the command they are typing based on the part of the command already typed. Command completion is typically based on finding commands or file names which start with something the user has already typed. It need not actually offer the user a way to complete the entire command or file name being entered, although it may do.
Some systems for example provide the user with a way to continue the file name being entered only up to the point where several alternatives exist. This may only be one or two letters or it could be nothing. It is noted that parts of the current invention are not dependent on having a method of command completion and that the methods of providing command completion described here are some of many possible methods of command completion which could be used.
An important advantage derived from having a shell operate on a plurality of machines on an equal basis, as is done in the current embodiment, is the ability to integrate command completion across multiple machines. This improved completion can also take account of other factors like the user credentials being used, the current search path etc. In other embodiments, command completion is not limited to information from file systems and completions may be derived from other sources like previously entered commands, a database of commands or some other source.
In the current embodiment of the completion feature a user presses a key when completion is required. At this point the shell control program determines which machine and user credentials apply to the section of the command currently being entered. Possible completions for the command or file name being entered are then generated by querying the relevant shell slave process which can efficiently query the file systems concerned. If applicable the current search path is used and in this case a plurality of shell slave processes on a plurality of machines may have to be queried if specified by the search path. In this embodiment, all possible completions up to the end of the current command or file name are considered. This may involve a significant number of possible alternatives and to help the user quickly select the option required a new type of selection system is used. Two lists are made by the shell control program, each list containing all of the possible completions. The lists are sorted by two different sorting criterion. For example, one list could be sorted alphanumerically and the other list could be sorted by length first, then alphanumerically where alternatives of the same length exist. The user can then move between the alternative selections either by choosing longer or shorter selections or alphabetically. This is done with four keys. For example left and right cursor keys could select shorter or longer selections respectively whilst the up and down cursor keys could select alternatives before or after the current alternative in an alphanumerical sense. At any point during the selection of the desired alternative any one of the four keys can be used to alter the selection towards the desired selection. To start the process an initial selection is presented. Keys must also be designated to conclude or cancel the completion process. The normal conclusion of the process is for the last completion to be accepted and this can be the default action which occurs should the user stop pressing the special completion keys and continue entering the command with some other key.
General While the invention has been particularly shown and described with reference to particular embodiments, it will be understood by those skilled in the art that various changes in form and detail may be made without departing from the spirit and scope of the invention.

Claims (31)

  1. I claim: 1. A method of specifying parameters for executing a command or partial command on one of a plurality of computer systems, comprising: (a) obtaining said parameters, (b) associating said parameters with a label, (c) storing said parameters, said label and said association between said parameters and said label, (d) associating said label with said command or partial command, whereby said label allows said parameters to be specified for said command or partial command in an abbreviated manner.
  2. 2. The method of claim 1 wherein said parameters include parameters selected from the group consisting of a host name, a set of user credentials, a current working directory, a set of system settings, a set of environment variables and a search path.
  3. 3. The method of claims I or 2 wherein: (a) said command or partial command is in text format, (b) said label is adjacent to said command or partial command, (c) said label and said command or partial command are separated by a symbol.
  4. 4. The method of claims 1, 2 or 3 where said command takes the form of a pipeline of processes.
  5. 5. The method of claims 1, 2 or 3 where said command takes the form of a list of pipelines of processes, said pipelines in said list being executed in a predetermined sequence.
  6. 6. The method of claim 5 wherein the execution of any of said pipelines may be dependent on a result obtained from a previously executed said pipeline.
  7. 7. The method of claim 6 wherein the details of said dependency are indicated by a symbol, said symbol being placed between an adjacent pair of said pipelines, said symbol also acting as a separator for said adjacent pair of pipelines.
  8. 8. The method of claim 4, 5, 6 or 7 where said pipeline of processes includes means for selecting a set of streams to be redirected at each stage of the pipeline, said set of streams being selected from a group containing: the standard output stream and the standard error stream.
  9. 9. A method of entenng commands involving a plurality of computers using any of the methods of claims 1, 2, 3, 4, 5, 6, 7 or 8.
  10. 10. A method of entering commands involving a plurality of computers using a grammar substantially as hereinbefore described with reference to figure 6
  11. 11. A method of running a single command involving a plurality of computer systems comprising: (a) providing means for interacting with the operating systems on said plurality of machines, (b) providing means for obtaining commands from a command source, (c) parsing a command obtained from said command source, (d) determining a list of machines from said plurality of machines on which said means for interacting with operating systems is required in order to run said command, (e) providing means for creating said means for interacting with operating systems on said list where said means for interacting with operating systems are not already present, (I) means for instructing said interacting means on said list so as to execute said command, whereby complex commands involving various processes on various machines can be executed.
  12. 12. The method of claim 11 wherein parameters within said command are specified by the any of the methods described in claims 1, 2, 3, 4, 5, 6, 7 or 8.
  13. 13. The method of claim 11 wherein the command is entered using the method described in claim 9 or 10.
  14. 14. The method of claims 11, 12 or 13 wherein said means for creating interacting means uses a well known protocol selected from a list containing a plurality of well known protocols.
  15. 15. The method of claims II, 12, 0 or 14 wherein said means for obtaining commands from a command source and said means for parsing said command is implemented with platform-independent object code and said means for interacting with operating systems is implemented with platform dependent object code whereby producing a maximally compatible system with a minimum amount of platform dependent code.
  16. 16. The method of claims 11, 12, 13, 14 or 15 wherein said command source includes means for obtaining input from a user combined with means for providing said user with a context sensitive completion facility, said context sensitive completion facility being based on information obtained from said means for interacting with operating systems on said plurality of computers.
  17. 17. A method of selecting from a set of alternatives using four input keys comprising: (a) creating two lists, each of said lists consisting of said set of alternatives sorted according to one of a plurality of predetermined sorting criteria, (b) associating each of said four input keys with either an up or a down direction on either of said two lists in a unique manner, (c) providing a means to store a single alternative, (d) presenting an initial alternative from said set of alternatives to a user and storing said initial alternative using said means to store an alternative, (e) obtaining input from said user, (f) determining whether said input is one of said four keys and if so, starting from said stored alternative, determining a next alternative using said associated direction and said associated list corresponding to said key, (g) presenting said next alternative to said user and storing said next alternative in said means to store a single alternative, (h) repeating the previous three steps until said user indicates said method should finish whereby a user can quickly move from an initial selection to a desired selection by choosing the most appropriate of four possible steps at each point.
  18. 18. The method of claim 16 wherein a user selects from the alternatives from said context sensitive completion facility using the method of claim 17.
  19. 19. The method of claims 11, 12, 13, 14, or 15 wherein input and output streams are managed with a method comprising: 3o (a) providing means for identifying a set of input and output streams from said command where said streams are being read from or presented to a user, (b) providing means for allocating a plurality of pseudo terminals or their equivalents on the operating system concerned, on a plurality of machines, said pseudo terminals or equivalents being allocated so that each stream from said set of streams can be routed via one of said pseudo terminals or equivalents, (c) providing means for routing each stream in said set of said streams through one of said pseudo terminals or equivalents, whereby each part of said command is provided with an environment similar to the environment which would be provided under a single-machine shell.
  20. 20. A method of launching a command on a plurality of machines comprising: (a) splitting said command into a set of command elements, each of said elements being associated with a particular machine from said plurality of machines, (b) providing an area on a visual display for said command to interact with a user, (c) allocating pseudo terminals or their operating system equivalents on said plurality of machines, (d) launching said command elements on said associated machines, said elements making use of said pseudo terminals or their operating system equivalents in order to read input from or send output to said user, (e) relaying output from said pseudo terminals to said area on said visual display, (f) relaying input from said user to one or more of said pseudo terminals whereby an independent network of processes and pseudo terminals or their operating system equivalents is created to run said command without interference from or interaction with any subsequent command entered or being entered by said user.
  21. 21. A method of running a command on a plurality of machines comprising: (a) providing an area on a visual display for said command to interact with a user, (b) providing means to detect attempts by said command to read input from said user on any of said plurality of machines, (c) providing a visual indication to said user when an attempt to read input is detected by said detection means.
    whereby said user can easily identify commands which require interaction.
  22. 22. A method of running a command on a plurality of machines comprising: (a) providing an area on a visual display for said command to interact with a user, (b) providing means to detect attempts by said command to read input from said user on any of said plurality of machines, (c) updating said visual display so that said area on said visual display is put into focus when an attempt to read input is detected by said detection means whereby allowing said user to easily interact with commands which require interaction or continue with other tasks where such interaction is not required.
  23. 23. A method of running a command on a plurality of machines comprising: (d) providing an area on a visual display for said command to interact with a user, (e) providing means to detect attempts by said command to read input from said user on any of said plurality of machines, (f) providing a means to determine whether said user is actively performing a task, (g) updating said visual display so that said area on said visual display is put into focus when an attempt to read input is detected by said detection means and said user is not determined to be performing a task by said determining means whereby allowing said user to easily interact with commands which require interaction, continue with other tasks where such interaction is not required but preventing interruption where other tasks are being actively performed.
  24. 24. The method of claims 21, 22 or 0 wherein said command is specified or run using any of themethodsofclaimsl,2,3,4,5,6,7,8,9,10,11,l2orl3.
  25. 25. A method of providing a plurality of terminal emulation areas within a user interface area on a visual display unit, comprising: (a) emulating a terminal of a predetermined width and height, (b) initializing said terminal emulation so that the cursor position is on the bottom line, (c) monitonng the lines in said terminal emulation which are updated as said emulation is running, (d) displaying only lines of said emulation from the topmost line which has been updated downwards, said topmost line being identified by said monitoring means, whereby space within said user interface area is conserved and said terminal emulation expands automatically as more lines are used.
  26. 26. The method of claim 25 wherein said command is specified or run using any of the methodsofclaims 1,2,3,4,5,6,7,8,9,10,11, 12or13.
  27. 27. The method of claim 25 where each command is launched as specified in claim 22.
  28. 28. A method for specifying a tile on a first machine where the operating system can access files on one or more second machines where said first machine uses single letters to identify local disk drives, said method comprising of: (a) providing a path separation character (b) building a path structure made up of said path separation character followed by either a single letter indicating a drive or the name of a second machine on which the file is situated followed by the full path to the file on said second machine or said drive, said full path starting with said path separation character and using said path separation character to separate the elements of said full path.
    whereby files accessible from said first machine can all be accessed using a convenient path structure with the exception of files on any second machines named using a single letter.
  29. 29. The method of claim 28 wherein said command is specified or run using any of the methodsofclaimsl,2,3,4,5,6,7,8,9,1O,11,12or13.
  30. 30. A shell as outlined in any of the above claims using a user interface layout substantially as hereinbefore described with reference to figure 7
  31. 31. A shell substantially as hereinbefore described with reference to figure 4.
GB0703112A 2007-02-17 2007-02-17 Multi-machine shell Expired - Fee Related GB2446608B (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
GB0703112A GB2446608B (en) 2007-02-17 2007-02-17 Multi-machine shell

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
GB0703112A GB2446608B (en) 2007-02-17 2007-02-17 Multi-machine shell

Publications (3)

Publication Number Publication Date
GB0703112D0 GB0703112D0 (en) 2007-03-28
GB2446608A true GB2446608A (en) 2008-08-20
GB2446608B GB2446608B (en) 2011-03-02

Family

ID=37908820

Family Applications (1)

Application Number Title Priority Date Filing Date
GB0703112A Expired - Fee Related GB2446608B (en) 2007-02-17 2007-02-17 Multi-machine shell

Country Status (1)

Country Link
GB (1) GB2446608B (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2513780A1 (en) * 2009-12-14 2012-10-24 Hewlett-Packard Development Company, L.P. Modifying computer management request
EP4040294A4 (en) * 2019-09-30 2022-10-26 Hangzhou Hikrobot Technology Co., Ltd. Process scheduling method and apparatus of vision software

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6721808B1 (en) * 2000-09-13 2004-04-13 Cisco Technology, Inc. Real-time creation of distributed object shell commands
GB2394575A (en) * 2002-09-10 2004-04-28 Sun Microsystems Inc System for a distributed shell in a distributed computer environment
US6886024B1 (en) * 1999-10-26 2005-04-26 Nec Corporation Distributed application control system, control method and a program
US20060026601A1 (en) * 2004-07-29 2006-02-02 Solt David G Jr Executing commands on a plurality of processes

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7698359B2 (en) * 2004-01-16 2010-04-13 Microsoft Corporation Remote system administration using command line environment

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6886024B1 (en) * 1999-10-26 2005-04-26 Nec Corporation Distributed application control system, control method and a program
US6721808B1 (en) * 2000-09-13 2004-04-13 Cisco Technology, Inc. Real-time creation of distributed object shell commands
GB2394575A (en) * 2002-09-10 2004-04-28 Sun Microsystems Inc System for a distributed shell in a distributed computer environment
US20060026601A1 (en) * 2004-07-29 2006-02-02 Solt David G Jr Executing commands on a plurality of processes

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Distributed Shell over Peer-to-Peer Network" Truong, M and Harwood, A available at http://www.cs.mu.oz.au/ïaharwood/online/TruongHarwood-2003b.pdf *
"Virtual Private Grid: A Command Shell for Utilizing Hundreads of Machines Efficiently" Kaneda, K, Taura, K and Yonezawa, A Background document available at http://citeseer.ist.psu.edu/609802.html and software downloadable from http://www.yl.is.s.u-tokyo.ac.jp/ïkaneda/vpg/ *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2513780A1 (en) * 2009-12-14 2012-10-24 Hewlett-Packard Development Company, L.P. Modifying computer management request
EP2513780A4 (en) * 2009-12-14 2014-10-22 Hewlett Packard Development Co Modifying computer management request
EP4040294A4 (en) * 2019-09-30 2022-10-26 Hangzhou Hikrobot Technology Co., Ltd. Process scheduling method and apparatus of vision software

Also Published As

Publication number Publication date
GB2446608B (en) 2011-03-02
GB0703112D0 (en) 2007-03-28

Similar Documents

Publication Publication Date Title
US8627342B2 (en) Multi-machine shell
US7703037B2 (en) Searchable task-based interface to control panel functionality
TWI526851B (en) Method and computer storage media for operating system program launch menu search
RU2398263C2 (en) Preview method, system and device
US7487466B2 (en) Command line provided within context menu of icon-based computer interface
US7490298B2 (en) Creating documentation screenshots on demand
KR20120091253A (en) Client-server input method editor architecture
US20020083216A1 (en) Multi-platform command line interpretation
KR20130072209A (en) Extension framework for input method editor
JPH05241797A (en) Method for systemizing software application package generating work
US7600199B2 (en) Task-based interface with underlying extensible framework
Sobell A Practical Guide to Fedora and Red Hat Enterprise Linux
US20100306747A1 (en) Automatic Retrieval of Translated Messages for Interacting With Legacy Systems
GB2446608A (en) A command shell for a distributed computer system
Stein Unix survival guide
Shalfield et al. WIN-PROLOG 8.1
Lindmark Automatically Generating Text-based Commands From Actions Performed Via GUI
Stein Unix survival guide
Bhardwaj How to Cheat at Windows System Administration using command line scripts
US20020103941A1 (en) Method and apparatus for launching heterogeneous software programs via a common program
Wilson Windows PowerShell 3.0 Step by Step
Stein Unix survival guide
Wootton et al. Setting Up a Terminal Emulator
Baclit et al. X Window System
Stanek Windows PowerShell 2.0 Administrator's Pocket Consultant

Legal Events

Date Code Title Description
746 Register noted 'licences of right' (sect. 46/1977)

Effective date: 20150217

PCNP Patent ceased through non-payment of renewal fee

Effective date: 20230217