Tag Archives: bash

Run DB2 SQL from the command line in SSH in a Bash shell on IBMi

Aliases in unix are used to make it easier to run commands that are long or hard to remember.  Below is an example of how to create an alias to run DB2 SQL

WARNING! – This is just an experiment and you might want to add some security to this to make sure that sql injection and other things don’t occur.

Shout out to @tweetjbh https://twitter.com/tweetjbh for the ideas!

Useful Shell/SSH/Bash commands for IBMi

What is my current path to binaries and libs:

echo $PATH

add a directory to my path so I don’t have to fully qualify the path to run. (we’re adding /QOpenSys/usr/bin)

export PATH=$PATH:/QOpenSys/usr/bin

Permanently set the default PATH used when you connect.  Create /home/MYPROFILE/.profile and add the export command above

In bsh just use


set libpath for *.so files


What can i do with SSH on IBMi? The alternative to QP2TERM AKA “OMGAwful”

Call SQL on DB2

system -i “call QSYS/QZDFMDB2 parm(‘select * from lib.table’)”

Create an alias in your .bash_profile file so its easier to run the command above

alias db2=’function _db2(){ echo “Running $1”; system -i “call QSYS/QZDFMDB2 parm(‘\”$1’\”)”; };_db2’

the sql command above becomes

db2 ‘select * from lib.table’

you can even send a sql file to this

db2 < cat ‘MyFile.sql’

Search the output of the Select statement via grep

system -i “call QSYS/QZDFMDB2 parm(‘select * from lib.table’)” | grep replace_w/_search_term

View all active jobs


Search all active jobs by user (case insensitive)

system WRKACTJOB | grep -i username

View all command line utilities that are available to use

ls -l /QOpenSys/usr/bin/  

Create a shell script MyShellScript.sh that executes multiple commands.  Then run it by calling MyShellScript on the ssh commandline.  And theres no need to COMPILE!  like you would need to if this was a CL program.


echo “Your running MyShellScript”
system WRKACTJOB | grep -i bob
system WRKACTJOB | grep -i sally

Setting the Path so you don’t have to type the path to your executable.  There’s the 5250 way and the SSH way.  You want to use $PATH to include the current path and then append to it by using a : (colon) as a deliminator.

5250: WRKENVVAR to setup PATH
SSH: Create .profile under /home/USERNAME , or /etc/profile, or environment file
Or run on the ssl command line: export PATH=$PATH:/QOpenSys/opt/freeware/bin/

View what your PATH and other environment variables are set to on the SSH shell


View process statuses (WRKACTJOB)
ps -ef

View Zend Processes

ps -ef | grep -i zend

Find the JobId,User, and program of the process ids

ps -ef | grep -i zend | awk '{print "qsh_out -c '\''/usr/bin/getjobid "$2"'\''"}'

Run git after you install it from http://perzl.org/

Find your CCSID system value and if its on 65535 change your profile to use ccsid 37


Display your library list from QSH or the current shell

system -i "DSPLIBL"

view a joblog

qsh_out -c "system -i 'dspjoblog job(123456/LIB/PGM)'"

Edit files with various editors (vim, nedit, vi, joe) or setup auto SFTP on a local IDE and upload your files on save to the IBMi

Restart Apache

/usr/local/zendsvr6/bin/i5_apache.sh restart

You may have to run this on the shell if you run into issues with the editor such as

xterm-256color: Unknown terminal type 
[hit return to continue] 
Visual needs addressable cursor or upline capability


xterm^M: Unknown terminal type
[Hit return to continue] 
[Using open mode]

You can either run this on the command line or setup your .bash_profile to setup this variable every time you log in


You’ll also want to look into setting up your .profile and .bash_profile files which are loaded when you ssh in, and run bash respectively.  These files should be created in the directory /home/MYUSER/

.bash_profile example:

Got any other ideas?  Share in the comments below


Tony C. CommonUG April 2015 – http://www.gateway400.org/documents/Gateway400/Handouts/IBMiFunWithShells.pdf

Setting up SSH on IBMi

Installing Bash on IBMi

Other cool things you can do w/ Bash

Quick and Simple way to install Bash on IBMi w/ local files

UPDATE 6.27.2016: If you rather install from a PTF check 5733-OPS opt 7 PTF SI61062 else learn to install it from Perzl’s site

Follow the steps below to install Bash

1. Download and unzip download-2.01-PHPDave.tar.zip locally and upload download-2.01-PHPDave.tar.zip to /QOpenSys on the IBMi

2. Open a 5250 session and run CALL QP2TERM.  We’ll extract the tar.zip file and it will create a download directory that will store all our open source binaries (such as Bash).  In QP2Term shell run:
cd /QOpenSys
tar -xf download-2.01-PHPDave.tar.zip
cd download

3. We’ll execute setup2.sh which installs various utilities needed to run wwwperzl.sh.  In QP2TERM and in directory: /QOpenSys/download run

#give the user, execute permission on setup2.sh
chmod u+x setup2.sh

4. Download bash (bash-4.3-16.aix5.1.ppc.rpm) and upload it to /QOpenSys/download/www.oss4aix.org/rpmdb/db

5. Download bash dependencies (bash-4.3-16.aix5.1.ppc.deps) and upload it to /QOpenSys/download/www.oss4aix.org/rpmdb/deplists/aix61

6. We’ll now get bash installed. In QP2TERM and in directory: /QOpenSys/download run

./wwwperzl.sh aix61 rpm1 bash-4.3

7. Bash should now be available!!! at the following directory: /QOpenSys/opt/freeware/bin/bash .  SSH into your ibmi and run /QOpenSys/opt/freeware/bin/bash.   Tips on setting up SSH for IBMi


1. view other bash versions here if you want a different version: ftp://www.oss4aix.org/RPMS/bash/

2. view other bash deps here if you want a different version: ftp://www.oss4aix.org/rpmdb/deplists/

3. View this image to determine which aixXX to use when running ./wwwperzl.sh aixXX rpm1 bash-4.3

4. You used to have to Download http://yips.idevcloud.com/wiki/uploads/PASE/setup2.sh and http://yips.idevcloud.com/wiki/uploads/PASE/wwwperzl.sh and upload setup2.sh and wwwperzl.sh to /QOpenSys/download but i’ve included that in the zip file




Whats in setup2.sh and wwwperzl.sh