Spaces:
Sleeping
Sleeping
import streamlit as st | |
import os | |
from subprocess import Popen, PIPE | |
import re | |
# Function to upload and save files | |
def save_uploadedfile(uploadedfile): | |
with open(os.path.join("uploads", uploadedfile.name), "wb") as f: | |
f.write(uploadedfile.getbuffer()) | |
return uploadedfile.name | |
# Function to analyze shell script with shellcheck | |
def analyze_shell_script(script_path): | |
command = f'shellcheck {script_path}' | |
process = Popen(command, shell=True, stdout=PIPE, stderr=PIPE) | |
stdout, stderr = process.communicate() | |
return stdout.decode(), stderr.decode() | |
# Function to fix common shell script issues (simple example) | |
def fix_shell_script_errors(script_content): | |
# Example: Remove unused variables warning (SC2034) | |
fixed_content = re.sub(r'\b\w+=["\'].+["\']\s*# SC2034', '', script_content) | |
return fixed_content | |
# Streamlit app layout | |
st.title("Shell Script Investigation and Fixing App") | |
# Upload the file | |
uploaded_file = st.file_uploader("Upload your shell script", type=["sh"]) | |
if uploaded_file is not None: | |
# Save uploaded file | |
file_name = save_uploadedfile(uploaded_file) | |
st.write(f"File '{file_name}' uploaded successfully!") | |
# Show the content of the uploaded file | |
st.subheader("Uploaded Shell Script") | |
script_content = uploaded_file.read().decode("utf-8") | |
st.code(script_content, language='bash') | |
# Provide button to run investigation | |
if st.button("Investigate"): | |
stdout, stderr = analyze_shell_script(os.path.join("uploads", file_name)) | |
if stderr: | |
st.error(f"Error during analysis: {stderr}") | |
else: | |
st.subheader("Investigation Results") | |
st.text(stdout) | |
# Provide button to fix errors | |
if st.button("Fix Issues"): | |
fixed_content = fix_shell_script_errors(script_content) | |
st.subheader("Fixed Shell Script") | |
st.code(fixed_content, language='bash') | |
st.download_button("Download Fixed Script", data=fixed_content, file_name=f"fixed_{file_name}") |