Apa keuntungan menggunakan bash -c dibandingkan menggunakan string di sini?

11

Apakah ada manfaat nyata menggunakan bash -c 'some command'lebih dari menggunakanbash <<< 'some command'

Mereka tampaknya mencapai efek yang sama.

yosefrow
sumber
Hai @ Patrick, terima kasih atas pemberitahuannya. Saya benar-benar tidak yakin di mana tempat terbaik untuk memposting. Karena, di satu sisi ini adalah pertanyaan Linux, tetapi di sisi lain bash adalah sejenis bahasa scripting dan situs lain memiliki lebih banyak pengunjung. Dalam kasus seperti ini, di mana tempat yang lebih tepat untuk memposting?
yosefrow
4
@yosefrow: Salah satu situs akan menjadi IMHO baik; tetapi crossposting menjengkelkan (Anda meminta orang di kedua situs untuk meluangkan waktu untuk pertanyaan Anda, tanpa memberi mereka manfaat dari jawaban masing-masing).
ruakh
Apakah pantas untuk menghapus posting dari salah satu situs itu?
yosefrow
2
Perbedaan kecil lainnya adalah yang bash -c '...'akan bekerja pada cangkang yang tidak memiliki herestrings. Anda mengasumsikan bahwa bash akan dipanggil dalam bash shell tetapi ini tidak akan selalu menjadi masalah.
Joel Cornett

Jawaban:

21

bash -c 'some command'mempertahankan akses ke input standar pemanggil, jadi readatau perintah membaca dari input standar akan bekerja secara normal. bash <<< 'some command'mengganti input itu dengan jalur yang dilewati, jadi bash -c catdan bash <<< catlakukan hal yang berbeda.

$ bash -c cat
abc
abc
^D
$ bash <<< cat
$

Di sisi lain, Anda dapat menggunakan fitur itu untuk memberikan input standar Anda sendiri untuk digunakan $'...', jika Anda sangat berhati-hati:

$ bash <<< $'read x y\nabc def ghi\necho $y'
def ghi
$

Saya tidak ingin bergantung pada itu, tapi kadang-kadang bisa nyaman.


bash -cjuga memungkinkan argumen untuk diteruskan ke skrip, dan $0ditetapkan:

bash -c 'some command' sh abc def

akan diatur $1ke abcdan $2ke defdalam some command.

Michael Homer
sumber
3
Kesalahan sintaksis juga akan menghasilkan kata-kata yang sedikit berbeda. Terutama bash -cyang disebutkan -c, AFAIK. Tidak sepenuhnya sia-sia, karena dapat membantu melacak mereka. bash <<< 'script'kesalahan terlihat seperti yang ada di skrip induk; bash -c 'script'yang tidak. Anda bahkan dapat label mereka: bash -c 'script' label.
derobert
Nah, bash <<< 'echo $1' /dev/stdin fooberfungsi juga, dan cetak foo. Padahal pengaturannya $0agak lebih terbatas.
ilkkachu
bash <<< 'echo "$1"' /dev/stdin footidak selalu berhasil. Saya mulai bash <<< 'echo "$1"' -s foobekerja.
G-Man Mengatakan 'Reinstate Monica'