Hy vọng sẽ ổn khi lưu ý điều này, bây giờ tôi đã gặp phải nó:
Tôi đã biết rằng người ta có thể kiểm tra sự tồn tại của tệp bằng lệnh test
( [
):
$ touch exists.file
$ if [ -f exists.file ] ; then echo "yes" ; else echo "no" ; fi
yes
$ if [ -f noexists.file ] ; then echo "yes" ; else echo "no" ; fi
no
... nhưng đó là một chút gõ ở đó :)
Vì vậy, tôi đã đi lang thang nếu có một lệnh "mặc định", điều đó sẽ trả về kết quả tồn tại của tệp stdout
?
Tôi cũng có thể sử dụng test
với trạng thái thoát $?
:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
... nhưng đây vẫn là hai lệnh - và logic cũng là "nghịch đảo" (0 cho thành công và khác không cho thất bại).
Lý do tôi hỏi là tôi cần kiểm tra sự tồn tại của tệp gnuplot
, trong đó " system("command")
trả về luồng ký tự kết quả từ thiết bị xuất chuẩn dưới dạng chuỗi. "; trong gnuplot
tôi có thể làm trực tiếp:
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
Vì vậy, về cơ bản tôi muốn có thể viết một cái gì đó như thế này (giả):
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
... thật không may, tôi không thể sử dụng trực tiếp qua test
và $?
:
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
... Tôi phải đảo ngược logic.
Vì vậy, về cơ bản, tôi phải đưa ra một giải pháp tập lệnh tùy chỉnh (hoặc viết một tập lệnh nội tuyến dưới dạng một lớp) ... và tôi nghĩ, nếu đã có một lệnh mặc định có thể in 0 hoặc 1 (hoặc một thông báo tùy chỉnh) để xuất bản cho sự tồn tại của tệp, sau đó tôi không phải làm như vậy :)
(lưu ý rằng ls
có thể là một ứng cử viên, nhưng đầu ra xuất sắc của nó quá dài dòng và nếu tôi muốn tránh điều đó, tôi phải loại bỏ tất cả đầu ra và một lần nữa trả lại trạng thái tồn tại, như trong
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
... nhưng đó lại là hai lệnh (và gõ nhiều hơn) và logic "đảo ngược" ...)
Vì vậy, có một lệnh mặc định duy nhất có thể làm điều này trong Linux không?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
?