เป็นไปได้ที่จะกำหนดคำสั่งในทุบตี?


25

ตัวอย่างเช่นฉันสามารถตั้งค่า:

gb = cd /media/Dan/evolution

... ดังนั้นทุกครั้งที่ฉันสั่งงานgbด้วย bash ฉันสามารถcdไปยังไดเรคทอรีนั้นได้หรือไม่

ฉันพบบางสิ่งที่ออนไลน์: aliasคำสั่ง แต่ดูเหมือนว่ามันจะไม่สามารถทำงานดังกล่าวได้

เป็นไปได้ที่จะทำหรือไม่ อย่างไร?


10
alias gb='cd /media/Dan/evolution'
Nykakin

4
@ เซนโปรดยอมรับคำตอบหากสามารถแก้ไขปัญหาได้ นี่คือท่าทางการพูดขอบคุณให้กับผู้ใช้ที่ช่วยคุณในการแก้ไขปัญหา :)
ราเมษ

2
หมายเหตุ: นี่เป็นเรื่องเกี่ยวกับ bash: Linux เป็นเคอร์เนล ลีนุกซ์มักใช้อย่างไม่ถูกต้อง, อ้างถึงระบบปฏิบัติการทั้งหมด. ซึ่งอาจทำให้เกิดความสับสน เช่นคำถามที่ว่า "ฉันสามารถทำสิ่งนี้ได้ภายใต้ Linux หรือไม่" คือถ้าคุณสามารถทำได้บนคอมพิวเตอร์บางเครื่องแล้วใช่ เพราะคุณสามารถใช้ระบบปฏิบัติการใด ๆ ที่คุณต้องการใช้เคอร์เนล Linux ดังนั้นเราจำเป็นต้องรู้ว่าคุณใช้ Ubuntu Gnu + Linux + น่าจะเป็น X11 (ถ้าบนเดสก์ท็อปนั่นคือไม่ใช่เซิร์ฟเวอร์ที่ไม่มีจอแสดงผล)
ctrl-alt-delor

@ Richard จุดดี แต่ในทางเทคนิคนี้คือการร้องเรียนจึงไม่ได้เป็นเพียงposix bash

1
@ Richard แน่นอนนั่นเป็นปัญหา มันใช้งานได้เพราะคนไม่ได้หมายถึง Android และรสชาติเช่นนั้นมากหรือน้อย ฉันไม่ได้บอกว่ามันเป็นสิ่งที่ดี แต่มันคือสิ่งที่มันเป็น การอ้างอิงของฉันมีความหมายตั้งแต่ฉันแสดงความคิดเห็นในคำสั่ง linux ของคุณ ฉันแค่ทำให้ตัวเองชัดเจนเพราะเรื่องนี้เป็นคำที่สับสน (ฉันอาจเข้าใจผิดความคิดเห็นล่าสุดของคุณ)
keyser

คำตอบ:


50

เพียงพิมพ์:

alias gb='cd /media/Dan/evolution'

ในการทำให้การตั้งค่านี้เป็นแบบถาวร (เพื่อให้มันติดหลังจากคุณรีสตาร์ทหรือเปิดคอนโซลอื่น) เพิ่มบรรทัดนี้ในไฟล์ ~ / .bashrc (สมมติว่าคุณใช้ bash เป็นเชลล์เริ่มต้นของคุณ)


เพื่อให้ดียิ่งขึ้นคุณสามารถสร้างไฟล์นามแฝงเฉพาะสำหรับนามแฝงของคุณพูด ~ / .bash_aliases และเรียกมันจากภายในไฟล์ ~ / .bashrc ของคุณเช่นนี้: [-e ~ / .bash_aliases] && ~ / .bash_aliases ด้วยวิธีนี้คุณจะไม่ "ทำให้สกปรก" ไฟล์ ~ / .bashrc กับสิ่งอื่น ๆ
GeertVc

39

ทางเลือกแทนนามแฝง

gb() { cd /media/Dan/evolution; }

สิ่งนี้นิยามฟังก์ชันเชลล์ gb ซึ่งไม่มีข้อโต้แย้งและดำเนินการ cd / media / Dan / evolution เช่นเดียวกับการแนะนำอื่น ๆ สิ่งนี้สามารถเพิ่มเข้าไปใน


ด้วยผู้ด้อยโอกาสที่คำสั่ง alias แสดง alias ที่กำหนดไว้ afaik การกำหนดฟังก์ชันดังกล่าวอาจส่งผลให้เกิด ฉันจะลงคะแนนให้เจ้าเพื่อความสมบูรณ์ :)
vfbsilva

7
ไม่ได้จริงๆ คุณสามารถพิมพ์: ประกาศ -f gb เพื่อดูว่ามันทำอะไร
Paul Calabro

11
นอกจากนี้ตัวเลือกนี้มีความยืดหยุ่นมากกว่าซึ่งช่วยให้คุณเพิ่มตรรกะที่กำหนดเองของคุณภายในนิยามฟังก์ชันเพื่อยอมรับอาร์กิวเมนต์และทำสิ่งที่คุณต้องการ นามแฝงอนุญาตให้ผ่านการขัดแย้งและทำการกระทำที่กำหนดไว้ล่วงหน้าเท่านั้น
Paul Calabro

5
@ PaulCalabro ยิ่งกว่าtype gbนั้นมันจะทำงานได้ถ้าเป็น alias หรือฟังก์ชั่น
Sparhawk

POSIXLY: { echo 'true() { : ; }' >./script ; . ./script ; command -V true ; command -V /usr/bin/true ; }- true is a shell function\n/usr/bin/true is /usr/bin/true- \nอักขระเป็นบรรทัดใหม่ตามตัวอักษรในเอาต์พุต
mikeserv

11

เป็นไปได้และaliasเป็นคำสั่งที่คุณกำลังมองหา ยกตัวอย่างเช่นalias ll="ls -l"ในทุบตีจะช่วยให้คุณพิมพ์แทนll ls -lโปรดทราบว่าไม่มีการเว้นวรรคเมื่อใช้นามแฝง man aliasมีประโยชน์เช่นกัน


-3

หรืออาจเขียนโปรแกรม C ที่เรียกคำสั่งที่ต้องการและบันทึกลงใน / usr / bin

#include <stdio.h>
#include <string.h>

int main () {
    char command[50]; //notice you can change this to fit your needs
    int return_val;

    strcpy( command, "echo \"cd /media/Dan/evolution\" | bash -i" );
    return_val = system(command); 

   //this is equivalent to entering the command in a new bash, 
   //which will return and exit

    return return_val;
}

ในการรวบรวมให้ไปที่ไดเรกทอรีที่บันทึกแหล่งข้อมูล (เป็น bash) และดำเนินการ (คุณอาจต้องใช้ sudo):

 gcc ./gb.c -o /usr/bin/gb

หลังจากการวิจัยเพิ่มเติมที่นี่ฉันรู้เพียงแค่โยนคำสั่งของคุณในsystem()จะไม่ทำงานสำหรับทุบตีในคำสั่ง นั่นเป็นเหตุผลที่คุณต้องสร้างอินสแตนซ์ของ bash แบบโต้ตอบและสะท้อนคำสั่งของคุณ มันซับซ้อนเกินไปและอาจไร้ประโยชน์เว้นแต่ว่าคุณต้องการตัดทอนการเรียกเชลล์สคริปต์ให้สั้นลง ( some_scriptแทนsh ~/radgeRayden/Scripts/some_script)

การอ้างอิงสำหรับฟังก์ชัน system ()


2
คุณลองสิ่งนี้จริงหรือ มันไม่ทำงาน
Dennis

1
ด้วยเหตุผลเดียวกันกับที่sh -c "cd /media/Dan/evolution"ใช้งานไม่ได้ คำแนะนำ: subshell
Digital Trauma

5
cd/ subshell แยกออกจากกันข้อดีของการห่อคำสั่งเชลล์ในโปรแกรม c คืออะไรเมื่อคุณสามารถวางคำสั่งนั้นลงในเชลล์สคริปต์ได้อย่างง่ายดาย
บาดเจ็บทางดิจิตอล

1
ไม่ใช่ผู้เชี่ยวชาญในเรื่องนี้ แต่ไม่ควรใส่อะไรเช่นนี้ (หวังว่าจะมีประโยชน์มากกว่านี้) / usr / local / bin?
Joe

2
แม้ว่า COULD นี้จะใช้งานได้ แต่ก็ไม่ควรเข้าไปใน / usr / local / bin เนื่องจากเป็นค่าเฉพาะสำหรับผู้ใช้รายเดียว
Johan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.