Tôi có một file có tên cmd có chứa một danh sách các lệnh unix như sau:lệnh Thi chứa không gian trong bash
hostname
pwd
ls /tmp
cat /etc/hostname
ls -la
ps -ef | grep java
cat cmd
Tôi có một kịch bản mà thực hiện các lệnh trong cmd như:
IFS=$'\n'
clear
for cmds in `cat cmd`
do
if [ $cmds ] ; then
$cmds;
echo "****************************";
fi
done
Vấn đề là các lệnh trong cmd không có dấu cách chạy tốt, nhưng các lệnh có dấu cách không được diễn giải đúng bởi tập lệnh. Sau đây là đầu ra:
patrick-laptop
****************************
/home/patrick/bashFiles
****************************
./prog.sh: line 6: ls /tmp: No such file or directory
****************************
./prog.sh: line 6: cat /etc/hostname: No such file or directory
****************************
./prog.sh: line 6: ls -la: command not found
****************************
./prog.sh: line 6: ps -ef | grep java: command not found
****************************
./prog.sh: line 6: cat cmd: command not found
****************************
Tôi thiếu gì ở đây?
Thực ra, anh ấy đang gặp vấn đề ngược lại.Đặt $ IFS khi anh ta thực hiện ở đây khiến 'for' phá vỡ trên các dòng mới, chính xác như anh ta muốn. Tuy nhiên, nó sau đó cố gắng để giải thích toàn bộ chuỗi như là một tên lệnh chứ không phải là một lệnh với các đối số. –
+1 để bù đắp downvote. :-) –
bằng cách gọi bash -c bạn đang bắt đầu một quy trình mới cho mỗi lệnh. Điều đó có vẻ quá mức và có thể có kết quả đáng ngạc nhiên. Ví dụ, nếu một trong các lệnh là lệnh cd, các lệnh tiếp theo sẽ không được chạy trong thư mục kia. –