Trong quá trình sử dụng Linux, chắc hẳn các bạn đã từng gặp lỗi này khi tạo backup, đặc biệt là trên DirectAdmin:

Với lỗi trên, iNET sẽ hướng dẫn cách xử lý cực nhanh tại bài viết này.

1. Cách xử lý lỗi Bad Interpreter: No such file or directory

Cách 1:

Đầu tiên, các bạn SSH vào server và chạy lệnh sau:

cd /usr/local/directadmin/scripts/custom/

Sau khi cd vào thư mục trên, ta chạy tiếp lệnh:

ls

hoặc

ll

2 lệnh trên có tác dụng liệt kê các file có trong đường dẫn trên

Sau đó ta chạy tiếp lệnh sau:

sed -i -e 's/\r$//' user_backup_post.sh

Trường hợp các bạn gặp lỗi ở file cụ thể nào, có thể thay thế lại file user_backup_post.sh trên thành tên file lỗi.

Ở ví dụ trên iNET đang gặp lỗi ở file user_backup_post.sh nên xử lý lệnh và chạy tên file trên.

Sau đó ta tiến hành kiểm tra lại là lỗi đã được khắc phục.

Lưu ý: không phải server nào cũng có đường dẫn giống nhau, các bạn cần kiểm tra lại cụ thể đường dẫn file sẽ nằm tại thư mục nào, quan trọng là tim được nơi chứa file để chạy lệnh sed -i -e trên.

Cách 2:

Các bạn có thể tạo file Script  "fix_interpreter.sh" như sau:

Nano auto_fix_interpreter.sh

 

#!/bin/bash
# auto_fix_interpreter.sh
# Script tự động fix lỗi "bad interpreter: No such file or directory"

TARGET="$1"

if [ -z "$TARGET" ]; then
  echo "❌ Bạn chưa nhập file cần sửa"
  echo "👉 Cách dùng: ./auto_fix_interpreter.sh target_script.sh"
  exit 1
fi

if [ ! -f "$TARGET" ]; then
  echo "❌ File không tồn tại: $TARGET"
  exit 1
fi

echo "👉 Đang xử lý file: $TARGET"

# 1. Chuyển CRLF -> LF
if file "$TARGET" | grep -q "CRLF"; then
  echo "⚡ Chuyển CRLF -> LF"
  sed -i 's/\r$//' "$TARGET"
fi

# 2. Xóa BOM UTF-8 nếu có
BOM=$(head -c3 "$TARGET" | xxd -p)
if [ "$BOM" == "efbbbf" ]; then
  echo "⚡ Xóa BOM UTF-8"
  tail -c +4 "$TARGET" > "${TARGET}.tmp" && mv "${TARGET}.tmp" "$TARGET"
fi

# 3. Kiểm tra shebang
SHEBANG=$(head -1 "$TARGET")
if [[ "$SHEBANG" == \#!* ]]; then
  INTERP=$(echo "$SHEBANG" | cut -c3-)
  if [ ! -x "$INTERP" ]; then
    echo "⚠️ Interpreter không tồn tại: $INTERP"
    BASE=$(basename "$INTERP")
    echo "👉 Thay bằng: #!/usr/bin/env $BASE"
    sed -i "1s|.*|#!/usr/bin/env $BASE|" "$TARGET"
  fi
fi

# 4. Thêm quyền thực thi
chmod +x "$TARGET"
echo "✅ Hoàn tất sửa lỗi cho: $TARGET"

Cách dùng:

chmod +x auto_fix_interpreter.sh
./auto_fix_interpreter.sh broken_script.sh

Chúc các bạn thao tác thành công.