Jika menjalankan watch
perintah yang berisi alias, itu tidak akan memperluas alias. Saya sudah mencoba keduanya dengan kutip tunggal dan ganda, bahkan diberikan alias berikut:
# alias ll
alias ll='ls -l --color=tty'
Perintah berikut akan gagal
# watch ll
sh: ll: command not found
Tidakkah seharusnya ekspansi baris perintah berfungsi dalam kasus ini?
watch
karena alias harus menjadi kata berikutnya, sedangkanwatch
memerlukan argumennya sebelum perintah dijalankan. Jika Anda mencobawatch -n 10 <alias>
, bash tidak akan memperluas alias. Untuk mengatasinya, Anda memerlukan alias yang menyertakan opsi yang Anda inginkan (misalnya, `alias watch-10 = 'watch -n 10'), masih dengan spasi tambahan.Mungkin kita bisa memperluas alias secara manual sebelum arloji melihatnya?
Penjelasan
Output dari
alias ll
terlihat seperti:Jadi kami menetapkan delimeter potong menjadi kutipan tunggal, dan memotong bidang ke-2, meninggalkan:
yaitu alias yang diperluas. Itu kemudian membentuk argumen yang diberikan kepada
watch
.Buat fungsi untuk melakukannya
Kemudian,
bekerja seperti yang diinginkan. Ini mengerikan dan akan gagal dalam segala situasi. Maaf.
sumber
Saya pikir di sini masalah dasarnya adalah ketika mengeksekusi
watch
, argumen diberikan ke "sh -c
" yang berarti jika aliasll
tidak didefinisikan dalamsh(dash shell's)
lingkungan maka tidak akan memperluasnya. Tapi saya salah dan ini bukan masalahnya, jawaban Chris di atas benar.sumber
watch 'alias ll="ls -l --color=tty"; type ll; ll'
.sh -c
" penjelasan Anda juga berlakush
. Apakah saya benar?sh
. Perhatikan bahwa ini tidak bekerja:sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
Telah
watch
menjalankan shell interaktif baru, yang akan memperluas alias:(Ini
-x
dimaksudkan untuk berhentiwatch
menggunakan itu sendirish -c
untuk membungkus perintah yang diberikan. Kami tidak ingin itu karena kami harus meneruskan-i
kesh
ataubash
, untuk menjadikannya shell interaktif, yang bertuliskan .bashrc dan mendefinisikan alias. Dengan-x
, arloji mengeksekusi perintah menggunakan exec.)Gah, sebenarnya, ini tidak berhasil. Setelah menampilkan output 'll' satu kali, lalu tidur 2 detik, pekerjaan menjadi latar belakang, dengan sedikit membingungkan:
Mengapa itu berhenti? Di mana brace terbuka
[
pergi? Sial saya pikir ini akan menjadi jawaban yang bagus tetapi saya tidak bisa membuatnya bekerja.sumber