Lasso Soft Inc. > Home

[shell]

Linkshell
AuthorJason Huck
CategoryOS Process
Version8.5.x
LicensePublic Domain
Posted12 Jun 2006
Updated27 Aug 2008
More by this author...

Description

This is a simple wrapper for the [os_process] type that allows you to interact with a bash shell, similar to how you would if you were using Terminal on OS X. On Windows, it interacts with the cmd process. The tag creates a new [os_process] type, opens a new shell, switches the current working directory to the folder from which the tag was called, and executes whatever command is passed to it. Requires [response_localfolder] and only loads if the [os_process] type is loaded.

Sample Usage

shell('echo foo');

-> foo

Source Code

Click the "Download" button below to retrieve a copy of this tag, including the complete documentation and sample usage shown on this page. Place the downloaded ".inc" file in your LassoStartup folder, restart Lasso, and you can begin using this tag immediately.

if(lasso_tagexists('os_process'));
	define_tag(
		'shell',
		-required='cmd',
		-privileged,
		-priority='replace',
		-description='Executes a single shell command via [os_process].'
	);
		local('os') = lasso_version( -lassoplatform);
	
		if(#os >> 'Win');
			local('shell') = os_process(
				'cmd',
				(: '/c cd ' + response_localfolder + ' && ' + #cmd)
			);		
		else;
			local('shell') = os_process(
				'/bin/bash',
				(: '-c', 'cd ' + response_localfolder + '; ' + #cmd)
			);
		/if;
		
		local('out') = #shell->read;
		!#out->size ? #out = #shell->readerror;
		#shell->close;
		return(#out);
	/define_tag;
/if;

Related Tags

Comments

27 Aug 2008, Jason Huck

Updated

[shell] now works on all platforms. It uses a bash shell on Mac and Linux, and cmd.exe on Windows.

11 Feb 2008, Jason Huck

Updated

[shell] now returns the contents of stderr if stdout was empty.

11 Feb 2008, Pier Kuipers

Adding optional "readerror"

Having used this tag with great effect for some time now, I found just one problem with it - sometimes the required output from cli operations is strictly regarded as an error, in which case [shell] does not return anything. To solve this problem, I added -optional='osreaderror' parameter to the tag's definition, which is called just before #shell->close as follows:
if(local_defined('osreaderror'));
#out = #shell->readerror;
/if;
It does the trick for me, and you might consider updating your tag to include this option if you think it worthwhile :-)

Please log in to comment

Subscribe to the LassoTalk mail list

LassoSoft Inc. > Home

 

 

©LassoSoft Inc 2015 | Web Development by Treefrog Inc | PrivacyLegal terms and Shipping | Contact LassoSoft