Mengapa echo $ (crontab-l) menampilkan daftar direktori saat ini dan hanya kemudian isi dari file crontab itu sendiri?

1

Jadi jika cwdadalah /tmpsekarang:

crontab -l
> #min hour day mon dow  command
> * * * * * /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw

tapi:

echo $(crontab -l)
> #min hour day mon dow  command 0004d519be91d 0004d519d798b launch-0NKnNe launch-NdhkpV
launch-bqJRD2 launch-zac20v launchd-276.rbWQ6r 0004d519be91d 0004d519d798b launch-0NKnNe
launch-NdhkpV launch-bqJRD2 launch-zac20v launchd-276.rbWQ6r 0004d519be91d 0004d519d798
launch-0NKnNe launch-NdhkpV launch-bqJRD2 launch-zac20v launchd-276.rbWQ6r 0004d519be91d 
0004d519d798b launch-0NKnNe launch-NdhkpV launch-bqJRD2 launch-zac20v launchd-276.rbWQ6r 
0004d519be91d 0004d519d798b launch-0NKnNe launch-NdhkpV launch-bqJRD2 launch-zac20v 
launchd-276.rbWQ6r /usr/local/bin/growlnotify -t 'helloTitle' -m 'helloMessage' -n 'myApp' -sw

jadi baris pertama + / konten tmp + baris terakhir dari crontab

Mengapa berperilaku seperti itu? Aku butuh $(crontab -l)untuk ituif [[ $(crontab -l | grep "^...$") =~ "^...$"]]

statis
sumber

Jawaban:

1

Anda mendapatkan daftar file karena "crontab -l" mengembalikan karakter bintang (*) yang kemudian ditafsirkan sebagai karakter gumpalan.

Saya sarankan Anda menggunakan 'set -f' di skrip shell Anda di sekitar tes untuk mengubah interpretasi glob:

set -f
if $(crontab -l | grep -q "^...$"); then
  # your stuff
fi
set +f
Patrice Levesque
sumber
Aku tahu itu! Terima kasih banyak untuk set -f!
statis
5
orang bisa membuat juga echo "$(crontab -l)", membantu juga
statis
2
Kutipan ganda adalah cara yang lebih baik untuk menyelesaikan ini.
Gordon Davisson
Ini adalah kesalahan sintaksis - ia mencoba mengeksekusi output dari grepdan gagal jika itu bukan perintah yang valid.
tripleee
0

Meningkatkan pada jawaban sebelumnya, tidak ada nilai dalam menjalankan perintah dalam subkulit.

if crontab -l | grep -q '^...$'; then
    your stuff
fi

Hanya untuk menekankan, ini menghindari kebutuhan set -fkarena hanya kode output dari grepyang diperiksa.

tripleee
sumber