Jalankan terminator di direktori yang diperlukan dan kemudian jalankan perintah yang diperlukan

9

Saya ingin membuka Terminator di direktori tertentu, misalnya /home/downloads/, dan kemudian jalankan perintah.

Saya melakukan bagian pertama dengan "perintah khusus" ini: cd /home/downloads; bash Terminator sekarang mulai di direktori ini, tetapi bagaimana saya bisa melakukan bagian kedua?

Sekarang terminator sudah dimulai di direktori unduhan, saya ingin menjalankan perintah yang saya inginkan, misalnya lsatau rakeperintah atau menggunakan beberapa alias sebagai perintah. Bagaimana saya bisa melakukan ini?

Saya menekan tombol kanan mouse di terminator dan memilih Parameters, lalu Layouts, lalu saya menambahkan teks di bagian Custom command.

Semua ini harus dilakukan secara otomatis setelah terminator mulai.

Asq
sumber
Perintah apa yang ingin Anda jalankan? Jalankan saja. Apakah Anda ingin ini terjadi secara otomatis setiap kali Anda membuka terminator? Harap edit pertanyaan Anda dan saya) mengklarifikasi apa yang ingin Anda lakukan dan ii) memberi tahu kami bagaimana Anda mengatur "perintah khusus" ini, apakah itu dalam opsi terminator?
terdon
Ya saya ingin yang pertama dan kemudian perintah kedua berjalan secara otomatis setelah saya terminator dijalankan, tetapi sekarang saya hanya tahu cara menjalankan perintah pertama dan itu berhasil, tetapi tidak tahu bagaimana kemudian jalankan perintah kedua. Perintah pertama adalah: "cd" untuk katalog apa pun dan perintah kedua haruslah yang saya inginkan, dalam katalog ini atau tidak. Saya mengedit pertanyaan saya. Maaf untuk bahasa jelek saya.
Asq

Jawaban:

4

Jalankan cd /home/downloads; exec bashsebagai perintah khusus. ( execBuiltin memastikan bahwa itu bashakan menjadi anak dari emulator terminal; tanpanya, itu mungkin berakhir menjadi cucu.) Anda dapat berjalan terminator -e 'cd /home/downloads; exec bash'pada baris perintah.

Anda tidak dapat menggunakan alias dalam perintah khusus karena alias Anda ditentukan oleh ~/.bashrc, tetapi file itu hanya dimuat oleh shell interaktif, bukan oleh shell scripting yang digunakan sebagai lem di sini antara emulator terminal dan shell scripting. Jika Anda ingin menggunakan alias, Anda harus memuatnya secara eksplisit. Jika Anda menyimpannya di file terpisah, itu akan menjadi sesuatu seperti

. ~/.bash_aliases; cd /home/downloads; exec bash

atau di baris perintah

terminator -x bash -c '. ~/.bash_aliases; cd /home/downloads; exec bash'

Jika alias Anda ada di dalamnya ~/.bashrc, maka gunakan . ~/.bashrc, tetapi berhati-hatilah karena ada beberapa hal di dalam Anda .bashrcyang menyebabkan kesalahan karena shell tidak interaktif. Jika ini terjadi, solusi termudah adalah dengan membagi alias Anda (dan fungsi dan pengaturan lain yang ingin Anda gunakan dalam kode lem) menjadi file terpisah dan gunakan .untuk memasukkan yang dari .bashrc.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3

Saya memiliki masalah yang sama untuk mengaktifkan lingkungan virtual dengan Terminator .

Caranya adalah dengan melakukan segala sesuatu hanya dengan perintah "satu": bash. Mengambil keuntungan dari -iopsinya (interaktif) dan menggunakan kebiasaan --rcfileyang PROMPT_COMMANDdiatur untuk apa pun yang ingin kita jalankan. Hasilnya akan seperti ini:

command = "bash --rcfile <(cat ${HOME}/.bashrc; echo 'export PROMPT_COMMAND="your commands; go here; unset PROMPT_COMMAND"') -i"

Cukup ganti your commands; go here;dengan perintah Anda yang sebenarnya. Lihat jawaban ini untuk penjelasan .

Peque
sumber
Adakah gagasan mengapa perintah yang saya tentukan tidak dapat dihentikan dengan ctrl + c?
Flowkap
2

Cukup tambahkan perintah lain dengan cara yang sama Anda menambahkan yang pertama. Misalnya, untuk menjalankan ls:

cd /home/downloads; ls; bash

Anda dapat menambahkan ini ke opsi "perintah" profil Anda:

masukkan deskripsi gambar di sini

Alasan yang tidak Anda dapatkan rakeadalah karena tidak ada di jalur default. Untuk menggunakannya, Anda perlu menentukan path. Jadi, pertama jalankan perintah ini di terminal Anda:

type rake

Itu akan mengembalikan sesuatu seperti /foo/bin/rake. Itulah jalan yang Anda butuhkan. Ambil dan tambahkan ke perintah Kustom di atas:

cd /home/downloads; /foo/bin/rake; bash

Ini tidak akan berfungsi untuk alias. Alias ​​diatur oleh shell Anda dan tidak akan tersedia di sini. Solusinya adalah dengan menggunakan skrip. Jadi, jika Anda memiliki alias seperti ini:

alias foo="command1 argument2"

Buat skrip, panggil foo.shdan simpan /home/youruser/bin, dengan konten ini:

#!/usr/bin/env bash
command1 argument2

Dan membuatnya dapat dieksekusi:

chmod a+x /home/username/bin/foo.sh

Kemudian, di bagian "Perintah khusus", gunakan:

cd /home/downloads; /home/username/bin/foo.sh; bash
terdon
sumber
Ya saya tahu ini dan "ls" perintah bekerja, tetapi 1. misalnya "rake" perintah tidak berfungsi dan terminal show error: "/ bin / bash: rake: command not found" 2. Saya punya beberapa alias, dan untuk contoh "cd / home / downloads; 'aliasname'; bash" juga tidak berfungsi, terminal menunjukkan kesalahan yang sama
Asq
@ Asq, ya, itu sebabnya saya meminta Anda untuk memberi tahu kami perintah apa yang ingin Anda jalankan. Harap edit pertanyaan Anda dan berikan contoh spesifik. Alias ​​tidak akan berfungsi, Anda bisa melupakannya, tetapi rakeharus jika Anda menggunakan path lengkap /path/to/rake.
terdon
Saya harus mengedit pertanyaan utama saya? Dan apa yang Anda maksudkan "jika Anda menggunakan path lengkap / path / ke / rake"? Saya cd ke direktori di mana saya selalu menggunakan rake dan itu berfungsi, tetapi "cd / path / to / rake; rake; bash" tidak berfungsi
Asq
@ Asq ya, harap edit pertanyaan awal Anda. Jangan cd /path/to/rake; rake; bashlakukan /path/to/rake; rake; bash.
terdon
:( saya menggunakan perintah rake ketika saya di direktori / home / 123. Saya menambahkan sekarang di perintah kustom ini: "/ home / 123; rake; bash" tetapi konsol tunjukkan 2 kesalahan: 1. / bin / bash: / home / 123: Ini adalah katalog 2. / bin / bash: rake: command not found
Asq
1

Jika Anda mengklik kanan pada jendela Terminator yang terbuka, Anda dapat memilih "Preferensi." Pilih "Profil" dan dari sana, tab "Command". Ada kotak centang berjudul "Jalankan perintah khusus, bukan shell saya."

Saya percaya itulah yang Anda cari.

rcjohnson
sumber
1

Hanya saja jangan gunakan ' command =' untuk mengubah direktori. Gunakan untuk perintah Anda yang sebenarnya!

Saat mengedit .config/terminator/config, cukup tentukan

  • ' directory = <dir>' ketika Anda ingin terminal secara otomatis cd ke satu dir yang diberikan, atau
  • ' command = <cmd>; <your_shell>' ketika Anda ingin mengeksekusi perintah kustom, dan tidak hanya mengubah direktori

Sebagai contoh:

  • Jika Anda hanya ingin terminal melakukan cd <dir>saat startup, maka tentukan 'direktori' dan biarkan 'perintah' kosong:

    [[terminal7]]]
    directory = /home/dan/src/wmc
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
  • Jika Anda hanya ingin menjalankan perintah khusus, hanya tentukan perintah:

    [[terminal7]]]
    command = /home/dan/mine/my-custom-command
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
  • Jika Anda ingin keduanya melakukan cd ke DIR dan menjalankan perintah:

    [[terminal7]]]
    directory = /home/dan/dl-dir
    command = /home/dan/mine/my-custom-command-to-run-in-dlDIR
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
1111161171159459134
sumber