Ich möchte eine Bash- Funktion erstellen und ausführen, die:
cd
in ein ProjektverzeichnisPunkt 2 funktioniert nicht wie erwartet, die neue Registerkarte ändert das Verzeichnis nicht.
Hier ist das Skript (beide Funktionen befinden sich in meiner .bashrc -Datei:
# Open a new tab (needs a path as an argument)
new_terminal_tab(){
osascript -e "tell application \"Terminal\"" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"cd $1; clear;\" in front window" \
-e "end tell"
> /dev/null
}
# Set up workspace
affiliatesForm(){
# cd into the project's directory
cd /Users/iamuser/Documents/path/to/project\ file
# Get the working directory
pwd=`pwd`
# Open a new tab in Terminal and cd into project's directory
# The idea is to have a tab with Rails server output, and another tab in the project's directory
new_terminal_tab $pwd
# Open the project in Sublime Text 2
subl $pwd
# Start the Rails server
rails server
}
Was mache ich falsch? Was macht dieser Code, den ich nicht weiß?
Der Pfad für das Verzeichnis, auf das ich zugreifen möchte, enthält Leerzeichen. Aber dem Raum zu entkommen, hilft überhaupt nicht. Das Skript arbeitet mit Pfaden, die keine Leerzeichen enthalten.
Beim Öffnen eines neuen Tabs im Terminal sollte standardmäßig das aktuelle Verzeichnis beibehalten werden. Wenn dies nicht der Fall ist, haben Sie möglicherweise die $PROMPT_COMMAND
.
; $PROMPT_COMMAND
Denken Sie auch daran, den vorherigen Wert nicht zu ersetzen, wenn Sie beabsichtigen, benutzerdefiniertes Verhalten durch Hinzufügen am Ende hinzuzufügen .
PROMPT_COMMAND="my_custom_function; $PROMPT_COMMAND"
Als Referenz ist hier die Standardeinstellung von /etc/bashrc
(OS X 10.9):
# Tell the terminal about the working directory at each prompt.
if [ "$TERM_PROGRAM" == "Apple_Terminal" ] && [ -z "$INSIDE_EMACS" ]; then
update_terminal_cwd() {
# Identify the directory using a "file:" scheme URL,
# including the host name to disambiguate local vs.
# remote connections. Percent-escape spaces.
local SEARCH=' '
local REPLACE='%20'
local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
printf '\e]7;%s\a' "$PWD_URL"
}
PROMPT_COMMAND="update_terminal_cwd; $PROMPT_COMMAND"
fi
Ich weiß, dass diese Frage etwas veraltet ist, aber ich habe gerade eine Antwort gefunden, die für iTerm2-Benutzer unter Mac OS X nützlich wäre.
Unter der Registerkarte „Profil“ in den iTerm2-Einstellungen können Sie genau festlegen, wo iterm neue Registerkarten unter der Überschrift „Arbeitsverzeichnis“ öffnet
Schließen Sie danach iTerm und starten Sie es neu, und Sie sollten bereit sein!
Wie bereits erwähnt, funktionierte mein Skript mit Pfaden, die keine Leerzeichen enthielten. Es stellt sich heraus, dass die Lösung darin besteht, die Variable (innerhalb new_terminal_tab()
von ) wie folgt in einfache Anführungszeichen zu setzen:
-e "do script \"cd '$1'; clear;\" in front window" \
Erstaunlich, was Anführungszeichen bewirken können, nicht wahr?
Der hier angebotene Service funktioniert für mich. Es öffnet eine neue Terminal-Registerkarte in dem Ordner, in dem ich den Dienst ausgeführt habe.
Ich bin auf das Problem gestoßen, dass, wenn ich bereits ein Terminalfenster geöffnet hatte, ein neues geöffnet wurde. Ich habe es wie folgt gelöst:
on run {input, parameters}
repeat with this_item in input
set the_path to POSIX path of this_item
repeat until the_path ends with "/"
set the_path to text 1 thru -2 of the_path
end repeat
set numberOfWindows to "0"
tell application "Terminal"
activate
set numberOfWindows to (numberOfWindows + (count windows))
if numberOfWindows is 0 then
do script with command "cd " & quoted form of the_path
activate
else
activate
delay (0.3)
tell application "System Events"
keystroke "t" using command down
end tell
do script with command "cd " & quoted form of the_path in window 0
end if
end tell
end repeat
return input
end run
Alle Anerkennung für diesen Code geht an Jeroen Leenarts . Ich habe nur ein paar kleine Anpassungen vorgenommen.
Ich verwende eine App namens go2shell. Dadurch erhalten Sie eine kleine Schaltfläche im Finder, die das aktuelle Verzeichnis in einem Terminal öffnet.
https://itunes.apple.com/es/app/go2shell/id445770608?mt=12
Sie können auch das Terminal verwenden, um in den gewünschten Ordner zu wechseln und „Öffnen“ zu verwenden.
sargas
isevcik