![如何在java中运行shell脚本时出现错误?](https://linux22.com/image/169601/%E5%A6%82%E4%BD%95%E5%9C%A8java%E4%B8%AD%E8%BF%90%E8%A1%8Cshell%E8%84%9A%E6%9C%AC%E6%97%B6%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF%EF%BC%9F.png)
我正在使用 java 来运行 shell 脚本,它运行得很好。现在我想从此脚本中获取错误,例如我有一个脚本,并且有一个错误,我想获取该错误的行和消息
这是我运行 shell 脚本的代码。
try {
JSch jsch=new JSch();
com.jcraft.jsch.Session session=jsch.getSession(jTextField1.getText() ,jTextField3.getText(),22);
session.setPassword(jTextField2.getText());
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
ChannelExec channel=(ChannelExec) session.openChannel("exec");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
/*cp .mbb.sh to /
chmod +x mbb.sh
./mbb.sh param1 param2*/
//chaine de caractére pour concatener les parametres
String param="";
for ( int j=0 ; j<list.size();j++){
param=param+" "+list.get(j).getText();
}
DB_Operation db = new DB_Operation();
db.getConnection();
channel.setCommand("bash"+" "+valeururl+ param);
//channel.setCommand("bash script.sh");
channel.connect(30000);
InputStream in = channel.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line ;
result.add("Build successful \n");
while((line =reader.readLine())!=null){
result.add(line);
}
if ( session.isConnected()){
JOptionPane.showMessageDialog(rootPane, "Connecté");
Resultexec rs =new Resultexec(result);
xx.dispose();
rs.createAndShowGUI();
}
} catch (JSchException ex) {
result.clear();
result.add("Build failed \n");
msg_console = ex.getMessage();
result.add(msg_console);
JOptionPane.showMessageDialog(rootPane, "Erreur de connexion ");
Resultexec rs =new Resultexec(result);
xx.dispose();
rs.createAndShowGUI();
} catch (IOException ex) {
result.clear();
result.add("Build failed \n");
msg_console = ex.getMessage();
result.add(msg_console);
Resultexec rs =new Resultexec(result);
xx.dispose();
rs.createAndShowGUI();
}
答案1
你好,我对代码做了一些修改,它可以工作
package dashboard;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
/**
*
* @author ASUS
*/
public class NewJFrame extends javax.swing.JFrame {
private int valeurcol ;
private static NewJFrame xx =new NewJFrame();
private static List <JTextField> list = new ArrayList();
ArrayList<String> li = new ArrayList();
private static List <String> result= new ArrayList();
String valeururl;
String msg_console="";
// une variable pour récuperer warming message au cours de la connexion
/**
* Creates new form NewJFrame1
*/
public NewJFrame() {
initComponents();
this.setExtendedState(this.MAXIMIZED_BOTH);
this.setSize(Toolkit.getDefaultToolkit().getScreenSize());
System.out.println(jLabel3.getLocation());
}
NewJFrame(int valeurcol, String valeururl) {
initComponents();
this.valeururl=valeururl;
this.setExtendedState(this.MAXIMIZED_BOTH);
this.setSize(Toolkit.getDefaultToolkit().getScreenSize());
try {
this.valeurcol = valeurcol ;
DB_Operation db=new DB_Operation();
ResultSet rs= db.searchQuery("select * from utilitaires where id_script='"+valeurcol+"'");
while(rs.isBeforeFirst()){
while(rs.next()){
descri.setText(rs.getString(3));
nscript.setText(rs.getString(2));
}
} DB_Operation db1=new DB_Operation();
ResultSet rs1 = db1.searchQuery("select * from parametres where id_script='"+valeurcol+"'");
int cpt = 0 ;
while (rs1.isBeforeFirst()){
while (rs1.next()){
// pur récuperer le libelé
li.add(rs1.getString(2));
cpt++;
}
}
LineBorder a =new javax.swing.border.LineBorder(Color.black);
jTextField1.setBorder(a);
jTextField2.setBorder(a);
jTextField3.setBorder(a);
for ( int j =0 ; j<cpt ; j++){
JTextField c=new JTextField();
c.setText("");
c.setBorder(a);
c.setSize(190, 28);
list.add(c);
c.setLocation(263,456+55*j);
jPanel1.add(c);
jPanel1.revalidate();
jPanel1.repaint();
JLabel l = new JLabel();
l.setLocation(157,456+49*j);
l.setSize(120, 20);
l.setText(li.get(j));
jPanel1.add(l);
}
JButton bt_exec = new JButton();
bt_exec.setSize(100, 30);
bt_exec.setText("Exécuter");
bt_exec.setLocation(263, 456+55*cpt);
jPanel1.add(bt_exec);
bt_exec.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
JSch jsch=new JSch();
com.jcraft.jsch.Session session=jsch.getSession(jTextField1.getText() ,jTextField3.getText(),22);
session.setPassword(jTextField2.getText());
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
Channel channel = null;
channel= session.openChannel("exec");
String param="";
for ( int j=0 ; j<list.size();j++){
param=param+" "+list.get(j).getText();
}
DB_Operation db = new DB_Operation();
db.getConnection();
( ( ChannelExec ) channel ).setCommand( "bash"+" "+valeururl+ param );
channel.connect();
BufferedReader reader = new BufferedReader( new InputStreamReader( channel.getInputStream() ) );
BufferedReader errorReader = new BufferedReader( new InputStreamReader(
( ( ChannelExec ) channel ).getErrStream() ) );
String lineerror ;
result.add("Build successful \n");
while((lineerror =errorReader.readLine())!=null){
result.add(lineerror);
}
String line1 ;
result.add("Build successful \n");
while((line1 =reader.readLine())!=null){
result.add(line1);
}
reader.close();
errorReader.close();
if ( session.isConnected()){
JOptionPane.showMessageDialog(rootPane, "Connecté");
Resultexec rs =new Resultexec(result);
xx.dispose();
rs.createAndShowGUI();
}
} catch (JSchException ex) {
result.clear();
result.add("Build failed \n");
msg_console = ex.getMessage();
result.add(msg_console);
JOptionPane.showMessageDialog(rootPane, "Erreur de connexion ");
Resultexec rs =new Resultexec(result);
xx.dispose();
rs.createAndShowGUI();
} catch (IOException ex) {
result.clear();
result.add("Build failed \n");
msg_console = ex.getMessage();
result.add(msg_console);
Resultexec rs =new Resultexec(result);
xx.dispose();
rs.createAndShowGUI();
}
}
});
JPanel exec = new JPanel();
TitledBorder x =new javax.swing.border.TitledBorder(a);
x.setTitle("Zone d'éxecution");
exec.setBorder(x);
exec.setLocation(100, 456+55*(cpt+1));
exec.setSize(721, 257);
exec.setBackground(Color.white);
// jPanel1.add(exec);
} catch (SQLException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel2 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jPanel1 = new javax.swing.JPanel();
jLabel4 = new javax.swing.JLabel();
nscript = new javax.swing.JLabel();
jScrollPane2 = new javax.swing.JScrollPane();
descri = new javax.swing.JTextArea();
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();
jTextField3 = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel2.addAncestorListener(new javax.swing.event.AncestorListener() {
public void ancestorMoved(javax.swing.event.AncestorEvent evt) {
jPanel2AncestorMoved(evt);
}
public void ancestorAdded(javax.swing.event.AncestorEvent evt) {
}
public void ancestorRemoved(javax.swing.event.AncestorEvent evt) {
}
});
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 1174, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 955, Short.MAX_VALUE)
);
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dashboard/Image/unnamed.jpg"))); // NOI18N
nscript.setFont(new java.awt.Font("Tahoma", 1, 36)); // NOI18N
nscript.setForeground(new java.awt.Color(102, 204, 204));
nscript.setText("Nom script");
descri.setEditable(false);
descri.setColumns(20);
descri.setRows(5);
jScrollPane2.setViewportView(descri);
jLabel1.setText("User");
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
jLabel2.setText("Password");
jLabel3.setText("Serveur");
jTextField3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField3ActionPerformed(evt);
}
});
jLabel5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dashboard/Image/back.png"))); // NOI18N
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(100, 100, 100)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(57, 57, 57)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel2))
.addGap(50, 50, 50)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)))))
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 721, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(339, 339, 339)
.addComponent(nscript)))
.addGap(0, 330, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 240, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel5)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel5)))
.addGap(26, 26, 26)
.addComponent(nscript)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(59, 59, 59)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addGap(27, 27, 27)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel2))
.addGap(27, 27, 27)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3))
.addContainerGap(1239, Short.MAX_VALUE))
);
jScrollPane1.setViewportView(jPanel1);
jLabel13.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dashboard/Image/back (1).png"))); // NOI18N
jLabel13.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jLabel13MouseClicked(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(5, 5, 5)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 4, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(579, 579, 579)
.addComponent(jLabel13)
.addContainerGap(580, Short.MAX_VALUE)))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 933, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(40, 40, 40)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(934, 934, 934)
.addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(980, Short.MAX_VALUE)))
);
pack();
}// </editor-fold>
private void jPanel2AncestorMoved(javax.swing.event.AncestorEvent evt) {
// TODO add your handling code here:
}
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jTextField3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jLabel13MouseClicked(java.awt.event.MouseEvent evt) {
PageAdmin pa = new PageAdmin();
this.dispose();
pa.setVisible(true);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
xx.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JTextArea descri;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JLabel nscript;
// End of variables declaration
}